如何保持android活动状态

时间:2018-10-23 19:24:04

标签: java android android-activity android-service android-service-binding

我的MainActivity有两项活动,另外一项名为DetailActivity。首次启动应用程序时,它将打开MainActivity,并在其中绑定DataService并进行调用以获取一些数据并填充列表视图。

在该列表视图中,用户可以打开一个按钮,以查看列表中每个项目的详细视图。打开该详细信息视图意味着开始第二个活动(DetailActivity)。

它是这样完成的:

final Intent intent = new Intent(getContext(), DetailActivity.class);
intent.putExtra("data", dto);
getContext().startActivity(intent);

打开第二个按钮后,用户可以通过使用后退按钮(在Android上为主页按钮的左键)或单击标题中的后退箭头来返回。

一切正常,除了用户再次回到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
    }
};

2 个答案:

答案 0 :(得分:0)

您可以通过将服务绑定到A1: text1-text2-text3 B1: text1-text2 (-text3 has been removed by the formula) 而不是onCreate()中来实现。

您还应该查看生命周期的对称性。当前,您在开始时绑定,而在destroy中取消绑定。如果您绑定onStart(),则可能应该取消绑定onStart。将绑定移至onStop时,可以将取消绑定保留在onCreate

说明:首先创建活动时将调用onDestroy。每当您的活动可见时,就会调用onCreate()

答案 1 :(得分:0)

设法解决了这个问题

@Override
public boolean onSupportNavigateUp() {
    onBackPressed(); // one inherited from android.support.v4.app.FragmentActivity

    return false;
}

以这种方式进行操作很有用。我会回到我离开的地方,因为一切都已经存在,所以不需要加载任何数据