pid死亡时的片段生命周期

时间:2013-05-23 11:51:47

标签: android android-fragments android-lifecycle

这是我解决这个问题的第二种方法,到目前为止没有运气。

我有MainActivity这是一个启动器活动。

onCreate方法中,我检查static endpoints是否已初始化。

如果没有 - >启动服务并注册接收器(show loader) - > onReceive显示一些片段

如果是 - >显示一些片段

这部分效果很好。

那么问题是什么?

我有一些片段MainActivity。然后我将流程放入后台并执行

adb shell am kill com.myapp

PID被杀了。所以现在我想再次启动应用程序。 Android尝试重新创建app状态意味着触发:

(为简单起见,我们假设MainActivity在运行时只有一个片段可见

MainActivity : onAttachFragment()
Fragment     : onAttach()
Fragment     : onCreate()
MainActivity : onCreate()
Fragment     : onCreateView()
...

问题在于:当MainActiviy.onCreate看到静态未初始化时,它会调用Service并等待响应。 这是一个正常的开始场景。但是这次正在重建Fragment,其生命周期与MainActivity生命周期混合在一起。所有这一切都发生异步我无法阻止Fragment的{​​{1}},onCreate()onResume()onStart()被解雇..而且其中一些方法需要静态被初始化(onCreateView()没有完成初始化过程)导致崩溃

所以我的问题是:我如何阻止在这种情况下重新创建MainActivity?所以这最好是一个干净的Fragment开始。此时的任何提示都将受到赞赏。

不可行解决方案或“我试过”解决方案:

  • 在手机上保存静态端点 - >不可能发生,因为端点每5分钟动态变化

  • MainActivitysingleTop singleTask

3 个答案:

答案 0 :(得分:0)

在MainActivity onCreate方法中,检查是否savedInstanceState is null or not

如果that is not null the don't start the service并创建片段。注意:您也不应该调用setContentView,因为这会丢弃视图甚至片段的已保存实例。

在片段的每个individual Fragment save the staterestore it中,如果OnCreate中的saveInstance Bundle,则onCreateView和onAttach为not null

答案 1 :(得分:0)

在片段onCreate中,检查静态变量是否已初始化。如果没有,则删除该片段并启动服务调用。服务调用完成后,像往常一样添加片段。

答案 2 :(得分:0)

我设法在MainActivity.onCreate()内做了类似的事情来克服这个问题:

if(!MyStatics.isInitialized())
    super.onCreate(null);
else
    super.onCreate(savedInstanceState);

这会导致重新启动Activity而不重新创建片段