Activity后台运行一段时间回来crash问题
来源:互联网 发布:9wifi九维网络登录 编辑:程序博客网 时间:2024/05/18 03:38
问题描述:
我的app中某个界面的Activity是继承FragmentActivity,因为此界面包含两个Fragment。这里我称为
FragmentA和FragmentB吧。在FragmentA和FragmentB中传入了该activity实例,当应用程序运行到该
Activity时,按Home键将该应用程序放置后台运行,使用其他的app。一段时间后,又回到该应用程序,
结果程序crash了。以上就是我的业务场景,说简单点就是Fragment需要与它附属的Activity进行通信。
问题分析:
刚开始遇到该问题时,查看奔溃日志,发现是空指针异常。因为这种场景不多,所以只是简单的加上
非空判断就没在意这个问题了。到后面换了个测试机器,配置不是很好(只有512M运行内存),结果此
问题频繁地出现。
我们看看FragmentActivity源码中的onSaveInstanceState方法:
protected void onSaveInstanceState(Bundle outState){ super.onSaveInstanceState(outState); Parcelable p = mFragments.saveAllState(); if (p != null) { outState.putParcelable("android:support:fragments", p); }}
由上面源码可以看出,FragmentActivity确实在onSaveInstanceState方法里面将Fragment的状态保存
了。
原来Activity切换到后台之后,由于内存不够,此Activity被系统回收了,一段时间之后回到该应用程
序,Activity被重新实例化了。而Activity被系统销毁时,附属在该Activity的Fragment并没有被销毁,在
Activity的onSaveInstanceState里面将Fragment状态保存起来了,所以Activity重新创建了,但是
FragmentA和FragmentB还是之前的,而此时FragmentA和FragmentB所附属的Activity已经被系统回收
了,这次再调用getActivity时返回了null,才导致上面问题的出现。
问题解决:
解决方法其实很简单,我们只要让FragmentActivity被系统回收的时候,不保存Fragment的状态即
可,即在FragmentActivity中重写onSaveInstanceState方法,并且注释掉
super.onSaveInstanceState(outState)就行了。
Override protected void onSaveInstanceState(Bundle outState) { //super.onSaveInstanceState(outState); }
- Activity后台运行一段时间回来crash问题
- Activity后台运行一段时间回来crash问题的分析与解决
- 应用切换到后台一段时间再切回来会崩溃
- 让activity后台运行
- iOS 后台运行一段时间(不是地图,音乐类型APP)
- Android 实现Activity后台运行
- Android 实现 Activity后台运行
- Android 实现Activity后台运行
- Android 实现Activity后台运行
- Android 实现Activity后台运行
- Android 实现Activity后台运行
- 从后台切换回来或者从Tabbarcontroller切换回来动画还能继续运行的解决方案
- python 后台运行问题
- cocos2dx切换到后台回来图片不显示问题
- Wince 运行一段时间后同步出错的问题
- Android 实现后台运行Activity的方法
- 复写back按键让activity后台运行
- 外部调用,通过activity,不用广播,后台运行的activity
- cordova插件生成工具类
- Matlab 在同一个坐标系下画颜色不相同的多个球体
- 基于驾驶行为数据的UBI车险模型(转)
- VC代码添加防火墙规则
- 已知指向节点p的指针,如何删除该节点(不知道链表头)
- Activity后台运行一段时间回来crash问题
- 急急急,求助:求会groovy语言的大神
- 算法提高 阮小二买彩票
- C 网页编辑器
- 独立显卡黑屏问题
- Android自定义View的实现方法,带你一步步深入了解View(四)
- <转>Spark执行模式解析
- Android程序签名打包
- 深入理解Java:注解(Annotation)自定义注解入门