Fragment中getActivity()或getContext()返回null的问题
来源:互联网 发布:文华程序交易模型源码 编辑:程序博客网 时间:2024/06/04 19:20
安卓app有一种特殊情况,就是 app运行在后台的时候,系统资源紧张的时候或者应用出现bug奔溃的时候导致把app的资源全部回收(杀死app的进程),这时把app再从后台返回到前台时,app会重启。这种情况下文简称为:“内存重启”。(屏幕旋转等配置变化也会造成当前Activity重启,本质与“内存重启”类似)
在系统要把app回收之前,系统会把Activity的状态保存下来,Activity的FragmentManager负责把Activity中的Fragment保存起来。在“内存重启”后,Activity的恢复是从栈顶逐步恢复,Fragment会在宿主Activity的onCreate方法调用后紧接着恢复(从onAttach生命周期开始)。
1.getActivity()空指针
可能你遇到过getActivity()返回null,或者平时运行完好的代码,在“内存重启”之后,调用getActivity()的地方却返回null,报了空指针异常。
大多数情况下的原因:你在调用了getActivity()时,当前的Fragment已经onDetach()
了宿主Activity。比如:你在pop了Fragment之后,该Fragment的异步任务仍然在执行,并且在执行完成后调用了getActivity()方法,这样就会空指针。
解决办法:
在Fragment基类里设置一个Activity mActivity的全局变量,在onAttach(Activity activity)里赋值,使用mActivity代替getActivity(),保证Fragment即使在onDetach后,仍持有Activity的引用(有引起内存泄露的风险,但是相比空指针闪退,这种做法“安全”些),即:
protected Activity mActivity;@Overridepublic void onAttach(Activity activity) { super.onAttach(activity); this.mActivity = activity;}/*** 如果你用了support 23的库,上面的方法会提示过时,有强迫症的小伙伴,可以用下面的方法代替*/@Overridepublic void onAttach(Context context) { super.onAttach(context); this.mActivity = (Activity)context;
作者:世锋日上
链接:http://www.jianshu.com/p/662c46cd3b5f
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- Fragment中getActivity()或getContext()返回null的问题
- Android: Fragment中getActivity()返回null的问题
- Android: Fragment中getActivity()返回null的问题
- Fragment中getActivity()和getContext()为空的问题
- Fragment中getActivity为null的问题
- Fragment getActivity()返回null
- 关于在Fragment中getActivity与getApplicationContext等方法返回null的问题
- 执行Fragment的getActivity()方法返回null
- Fragment中调用getActivity为null的问题
- 关于Fragment中getActivity为Null的问题
- Fragment中调用getActivity为null的问题
- Fragment中调用getActivity为null的问题
- 关于Fragment中getActivity为Null的问题
- Fragment中调用getActivity概率性为null的问题
- Fragment中调用getActivity为null的问题
- Fragment中调用getActivity为null的问题
- Fragment中调用getActivity为null的问题
- Fragment中调用getActivity()为null的问题
- HEEDS MDO 2017.04.2 Win64 & Linux64 2CD+Receiver
- 股票BOLL计算
- Netty百万级推送服务设计要点
- 接金币这个c++代码理解不了,求解释
- Shader编程学习笔记(三)—— 三大主流编程语言 HLSL/GLSL/Cg
- Fragment中getActivity()或getContext()返回null的问题
- 【模板】ST稀疏表
- AndroidManifest 文件合并错误-->tools:replace="android:value"问题
- Communication error. Please use diagnostic mode to check connectivity. You need to have outbound acc
- andriod studio引入hellocharts jar包出现 Cannot resolve symbol LineChartView错误的解决办法
- 字符转ASII码以及大小写之间的转换
- Mybatis中#和$的区别
- 【算法题】博弈论:leetcode 486 数组取数
- LLVM学习笔记(19)