如何保存android活动的状态
Posted
技术标签:
【中文标题】如何保存android活动的状态【英文标题】:How to preserve the state of android activity 【发布时间】:2019-03-28 03:07:51 【问题描述】:我有两个活动,我的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
;
【问题讨论】:
是的,对不起,英语不是我的第一语言。我使用了自动更正。 你必须在 Parent Activity 中使用 savedinstancestate 来控制行为 【参考方案1】:您可以通过将服务绑定到onCreate()
而不是onStart()
来实现。
您还应该了解您的生命周期的对称性。目前,您在开始时绑定并在销毁时取消绑定。如果您在onStart
中绑定,您可能应该在onStop
中取消绑定。当您将绑定移动到onCreate
时,您可以将取消绑定保留在onDestroy
解释:onCreate()
在首次创建活动时被调用。每次您的活动变得可见时,都会调用onStart()
。
【讨论】:
我仍然有同样的行为。我还注意到当我从第二个活动回来时调用了 onDestroy。我不确定这是否应该发生。 如果您的设备内存不足或开发者选项中的“不保留活动”处于打开状态,那么您的活动将在它变得不可见时被销毁,并在它变得可见时重新创建。您可以通过实现“onSaveInstanceState(Bundle)”来保存这些情况下的活动状态。您可以将原始值或可序列化或可打包的对象放入捆绑包中,然后在“onCreate”的参数中将该捆绑包交付给您。例如,您可以将滚动项目的索引保存在那里,然后在再次获取数据后以编程方式滚动到它。【参考方案2】:设法像这样解决它
@Override
public boolean onSupportNavigateUp()
onBackPressed(); // one inherited from android.support.v4.app.FragmentActivity
return false;
这样做是为了成功。我会回到我离开的地方,不需要加载任何数据,因为一切都已经存在了
【讨论】:
以上是关于如何保存android活动的状态的主要内容,如果未能解决你的问题,请参考以下文章
在Android recyclerVIew中单击项目时如何保存状态
Android:通过保存 Activity 状态进行测试的捷径