如何保存 android activity 的状态
How to preserve the state of android activity
我有两项活动,我的 MainActivity
和另一项名为 DetailActivity
的活动。当应用程序首次启动时,它会打开 MainActivity
并在那里绑定 DataService
并调用以获取一些数据并填充列表视图。
在该列表视图中,用户有一个按钮可以为列表中的每个项目打开所谓的详细视图。打开该详细视图意味着开始第二个 activity (DetailActivity
).
它是这样完成的:
final Intent intent = new Intent(getContext(), DetailActivity.class);
intent.putExtra("data", dto);
getContext().startActivity(intent);
当第二个打开时,用户可以使用后退按钮(android 主页按钮的左侧)或单击 header 中的后退箭头返回。
一切都按预期工作,除了当用户返回 MainActivity
时 DataService
再次绑定并调用以获取数据并更新列表。因此,如果用户在项目编号的某处。 205他会回到起始项
有没有办法在用户返回未刷新时保存 MainActivity
的数据或状态?
服务是这样绑定的
@Override
protected void onStart() {
super.onStart();
bind(DataService.class);
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(connection);
}
private void bind(final Class... toBind) {
for (final Class clazz : toBind) {
bindService(new Intent(this, clazz), connection, BIND_AUTO_CREATE);
}
}
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(final ComponentName name, final IBinder service) {
if (service instanceof DataService.LocalBinder) {
dataService = ((DataService.LocalBinder) service).getInstance();
dataService.readData();
}
}
@Override
public void onServiceDisconnected(final ComponentName name) {
// Empty By Default
}
};
您可以通过在 onCreate()
而不是 onStart()
中绑定服务来实现此目的。
你也应该看看你生命周期的对称性。目前你在开始时绑定,在销毁时解除绑定。如果您在 onStart
中绑定,您应该在 onStop
中解除绑定。当您将绑定移动到 onCreate
时,您可以将解除绑定保留在 onDestroy
说明:onCreate()
在activity先创建时被调用。每次 activity 可见时都会调用 onStart()
。
这样解决了
@Override
public boolean onSupportNavigateUp() {
onBackPressed(); // one inherited from android.support.v4.app.FragmentActivity
return false;
}
这样做可以达到目的。我会 return 到我离开的地方,不需要加载任何数据,因为一切都已经存在
我有两项活动,我的 MainActivity
和另一项名为 DetailActivity
的活动。当应用程序首次启动时,它会打开 MainActivity
并在那里绑定 DataService
并调用以获取一些数据并填充列表视图。
在该列表视图中,用户有一个按钮可以为列表中的每个项目打开所谓的详细视图。打开该详细视图意味着开始第二个 activity (DetailActivity
).
它是这样完成的:
final Intent intent = new Intent(getContext(), DetailActivity.class);
intent.putExtra("data", dto);
getContext().startActivity(intent);
当第二个打开时,用户可以使用后退按钮(android 主页按钮的左侧)或单击 header 中的后退箭头返回。
一切都按预期工作,除了当用户返回 MainActivity
时 DataService
再次绑定并调用以获取数据并更新列表。因此,如果用户在项目编号的某处。 205他会回到起始项
有没有办法在用户返回未刷新时保存 MainActivity
的数据或状态?
服务是这样绑定的
@Override
protected void onStart() {
super.onStart();
bind(DataService.class);
}
@Override
protected void onDestroy() {
super.onDestroy();
unbindService(connection);
}
private void bind(final Class... toBind) {
for (final Class clazz : toBind) {
bindService(new Intent(this, clazz), connection, BIND_AUTO_CREATE);
}
}
private ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(final ComponentName name, final IBinder service) {
if (service instanceof DataService.LocalBinder) {
dataService = ((DataService.LocalBinder) service).getInstance();
dataService.readData();
}
}
@Override
public void onServiceDisconnected(final ComponentName name) {
// Empty By Default
}
};
您可以通过在 onCreate()
而不是 onStart()
中绑定服务来实现此目的。
你也应该看看你生命周期的对称性。目前你在开始时绑定,在销毁时解除绑定。如果您在 onStart
中绑定,您应该在 onStop
中解除绑定。当您将绑定移动到 onCreate
时,您可以将解除绑定保留在 onDestroy
说明:onCreate()
在activity先创建时被调用。每次 activity 可见时都会调用 onStart()
。
这样解决了
@Override
public boolean onSupportNavigateUp() {
onBackPressed(); // one inherited from android.support.v4.app.FragmentActivity
return false;
}
这样做可以达到目的。我会 return 到我离开的地方,不需要加载任何数据,因为一切都已经存在