如何保存 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 中的后退箭头返回。

一切都按预期工作,除了当用户返回 MainActivityDataService 再次绑定并调用以获取数据并更新列表。因此,如果用户在项目编号的某处。 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 到我离开的地方,不需要加载任何数据,因为一切都已经存在