主界面是 ViewPaper + fragment 实现的,当 app 挂掉之后会自动重启,但重启之后界面空白。
看了 hierarchyviewer 是 fragment 未绑定到 ViewPaper 里;
打日志看到 fragment 是跟父 activity 一起重启的,即大家都同时运行 onCreate 方法;
正常启动时,是 Activity 运行到 onResume 时,才去初始化 fragment 。
参考了:http://stackoverflow.com/questions/7746652/fragment-is-blank-the-second-time-it-is-viewed
把 FragmentPagerAdapter 改成 FragmentStatePagerAdapter ,界面空白的问题解决了;
但迎来了新的问题:调试发现,每个 fragment 都有三个实例,而且有着相同的生命周期状态。
添加了如下代码,每个 fragment 都有三个实例变成了两个实例。
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
最后都找不到原因,只好在 fragment 创建时,先检查是否有相同的实例,有则先停掉:
private static MsgFragment INSTANCE;
if (null != INSTANCE) {
getActivity().getSupportFragmentManager().beginTransaction().remove(INSTANCE).commit();
}
INSTANCE = this;
看调试日志,就会发现 fragment 重复地创建、销毁几次,然后正常了,但还是消耗了资源。