当pid终止时,片段生命周期



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

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

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

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

如果是->显示一些片段

这部分效果很好。

那么问题是什么呢?

我有MainActivity与一些片段。然后我把进程放到后台,输入

adb shell am kill com.myapp

PID被杀死。现在我想再次启动应用。Android试图重新创建应用状态,意思是触发:

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

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

问题是这样的:当MainActiviy.onCreate看到静态未初始化时,它调用对Service的调用并等待响应。正常启动场景。但这一次Fragment也被重新创建,它的生命周期与MainActivity的生命周期混合在一起。因为所有都是异步发生的,我不能阻止FragmentonCreate(), onResume(), onStart(), onCreateView()从发射。其中一些方法需要初始化静态(MainActivity还没有完成init进程),这会导致崩溃

所以我的问题是:我如何能防止Fragment在这种情况下被重新创建?所以这是一个干净的MainActivity开始。如有任何提示,我将不胜感激。

不可行的解决方案或"我试过了"的解决方案:

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

  • singleTop, singleTask for MainActivity

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

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

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

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

我通过在MainActivity.onCreate()中做这样的事情来克服这个问题:

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

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

最新更新