系统杀死一个应用程序后,碎片会发生什么?

What happens to fragments after the system kills an app?

"If an activity is paused or stopped, the system can drop the activity from memory by either asking it to finish, or simply killing its process."。当用户返回 activity 时,它会使用捆绑包恢复其状态。

我的问题是:

在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()

如果您在 onSaveInstanceState() 中正确保存了您的 activity 和片段的状态,并且您希望您的 activity 以它被杀死之前的状态重新创建,您应该使用您发布的第一段代码。

FragmentManager 保存其状态,并在重新创建时恢复 activity 被杀死时它持有的碎片。它使用片段的保存状态引导他们完成构建生命周期事件:创建、创建视图、开始、恢复。

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

为了使这一切正常工作,您必须小心地将 activity 和片段的状态保存在各自的 onSaveInstanceState() 方法中,然后保存在 onCreate() 中测试 savedInstanceState,当不为空时,使用包恢复 activity/fragment.

的状态

这是 saving/restoring activity state. More info here 的指南。