问题描述:
在app正常登陆时,进入主页面没有问题,但是在从设置页面退出登陆,然后再登陆进入主页面app就崩溃了,查看日志发现是onActivityCreated方法里的初始化代码没被执行
原因探索
百度了一下原因无果,接着谷歌到了Stack Overflow上的答案,这里附上原文链接 ,这里简单描述一下原因,试着打印了一下正常状态跟重新登录Fragmet的生命周期
- 正常状态下
176448881: DynamicFragment.<init> / ctor
176448881: DynamicFragment.onAttach / in base with context
176448881: DynamicFragment.onAttach / in base with activity
176448881: DynamicFragment.onAttach / out base with activity
176448881: DynamicFragment.onAttach / out base with context
176448881: DynamicFragment.onCreate / in base
176448881: DynamicFragment.onCreate / out base
176448881: DynamicFragment.onCreateView / in brand new
176448881: DynamicFragment.onCreateView / out
176448881: DynamicFragment.onViewCreated / in base
176448881: DynamicFragment.onViewCreated / out base
176448881: DynamicFragment.onActivityCreated / in base
176448881: DynamicFragment.onActivityCreated / out base
176448881: DynamicFragment.onViewStateRestored / in base
176448881: DynamicFragment.onViewStateRestored / out base
176448881: DynamicFragment.onStart / in base
176448881: DynamicFragment.onStart / out base
176448881: DynamicFragment.onResume / in base
176448881: DynamicFragment.onResume / out base
- 重新登录状态下
D/NSA: onRestart
176448881: DynamicFragment.onStart / in base
176448881: DynamicFragment.onStart / out base
176448881: DynamicFragment.onResume / in base
176448881: DynamicFragment.onResume / out base
-
总结原因
我的主页面的MainActivity的启动模式设的是singleTask, 重新登录时,没有完全关闭主页面,此时启动MainActivity走的是onRestart的生命周期,在MainActivity里的Fragment直接走的是onStart 生命周期,前面的生命周期跳过了 -
解决方案
将Fragment的初始化代码放入onStart方法里即可