系统杀死应用程序后片段会发生什么?

时间:2015-07-17 02:12:28

标签: android fragment state

“如果活动暂停或停止,系统可以通过要求完成活动,或者简单地终止其进程来从内存中删除活动。”当用户返回活动时,它会使用捆绑包恢复其状态。

我的问题是:

在oncreate中执行此操作非常重要:

if(savedinstance != null)
{
    fragement = fm.findFragmentByTag("tag");
}
else
{
    fragment = new Fragment();
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.add(R.id.webViewFrame,fragment,"tag");
    ft.commit()
}

而不仅仅是这个:

    fragment = new Fragment();
    FragmentManager fm = getFragmentManager();
    FragmentTransaction ft = fm.beginTransaction();
    ft.add(R.id.webViewFrame,fragment,"tag");
    ft.commit()

1 个答案:

答案 0 :(得分:2)

如果您在onSaveInstanceState()中正确保存活动和片段的状态,并且希望在其被杀死之前的状态下重新创建活动,则应使用您发布的第一个代码块

FragmentManager保存其状态,并在重新创建时恢复活动被杀死时所持有的碎片。它使用片段的保存状态逐步完成构建生命周期事件:create,createView,start,resume。

我很确定如果您尝试运行第二个代码块,重新启动后会发现FragmentManager中有两个片段实例 - 首次创建活动时添加的实例,并在重新启动后添加了一个。

为了使这一切正常运行,您必须小心地将活动和片段的状态保存在每个活动和片段的onSaveInstanceState()方法中,然后在onCreate()测试中savedInstanceState当不为null时,使用bundle恢复活动/片段的状态。

这是saving/restoring activity state的指南。更多信息here