“如果活动暂停或停止,系统可以通过要求完成活动,或者简单地终止其进程来从内存中删除活动。”当用户返回活动时,它会使用捆绑包恢复其状态。
我的问题是:
在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()
答案 0 :(得分:2)
如果您在onSaveInstanceState()
中正确保存活动和片段的状态,并且希望在其被杀死之前的状态下重新创建活动,则应使用您发布的第一个代码块
FragmentManager
保存其状态,并在重新创建时恢复活动被杀死时所持有的碎片。它使用片段的保存状态逐步完成构建生命周期事件:create,createView,start,resume。
我很确定如果您尝试运行第二个代码块,重新启动后会发现FragmentManager
中有两个片段实例 - 首次创建活动时添加的实例,并在重新启动后添加了一个。
为了使这一切正常运行,您必须小心地将活动和片段的状态保存在每个活动和片段的onSaveInstanceState()
方法中,然后在onCreate()
测试中savedInstanceState
当不为null时,使用bundle恢复活动/片段的状态。
这是saving/restoring activity state的指南。更多信息here。