这是我解决此问题的第二种方法,到目前为止还没有运气。
我有MainActivity
哪个是启动器活动。
在其onCreate
方法中,我检查是否static endpoints
已初始化。
如果没有 -> 启动服务并注册接收器(显示加载器) ->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
生命周期混合在一起。因为一切都是异步发生的,所以我无法阻止Fragment
's onCreate()
, onResume()
, onStart()
,onCreateView()
触发..其中一些方法需要初始化静态变量(MainActivity
尚未完成 init 进程),这会导致崩溃
所以我的问题是:如何防止Fragment
在这种情况下被重新创建?所以这最好是一个干净的MainActivity
开始。在这一点上的任何提示将不胜感激。
不可行的解决方案或“我试过了”解决方案:
在手机上保存静态端点 -> 不可能发生,因为端点每 5 分钟动态更改一次
singleTop
,singleTask
对于MainActivity