序言
Fragment错乱展示图.png现在手机内存都还挺大的,我们用魅族Mx4pro 3G内存做实验可以申请到的最大内存空间为221M 如果设定属性android:largeheap = "true"时, 可以申请的最大内存空间为478M,是原来的两倍多一些。
假如现在应用退到后台了,执行了某个清理软件可能app会收到内存紧张的通知再进入app可能我们activity就重启了,里面如果有fragemnt那可能就出现了错乱问题 !开始我们的表演
进入主题
Anroid基于进程中运行的组件及其状态规定了默认的五个回收优先级:
- Empty process(空进程)
- Background process(后台进程)
- Service process(服务进程)
- Visible process(可见进程)
- Foreground process(前台进程)
我们使用模拟器来模拟 , 新建模拟器配置参数
image.png
运行起来我们app -> 随便点击让fragment进行替换 -> Home键盘回到后台 -> 打开系统浏览器或者其他
-> studio执行命令 am kill 包名 通知内存紧张 -> ok 再到我们主界面看看fragment是不是乱了
解决办法
在activity中
if (savedInstanceState != null && !savedInstanceState.isEmpty()) {
try {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
for (int i = 0; i < fragments.size(); i++) {
getSupportFragmentManager()
.beginTransaction()
.remove(fragments.get(i))
.commitAllowingStateLoss();
}
} catch (Exception e) {
e.printStackTrace();
}
EventBus.getDefault().unregister(this);
ActivityManager.getInstance().finishAllActivity();
this.finish();
Intent intent = new Intent(this, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
return;
}
最简单暴力的方法,让Activity重置!如果需要保存Fragment状态可以使用
onSaveInstanceState // 内存吃紧保存状态
onRestoreInstanceState // 例如切换横竖屏时Activity销毁后 回复状态方法 参数一定有数据
网友评论