最近在友盟上经常看到getActivity()为null的情况,今天来把它彻底解决掉。
这种问题应该主要有两方面原因:
1, 如果系统内存不足、切换横竖屏、app长时间在后台运行,Activity都可能会被系统回收然后重建,但Fragment并不会随着Activity的回收而被回收,创建的所有Fragment会被保存到Bundle里面,从而导致Fragment丢失对应的Activity。
解决方案:让fragment跟着activity一起销毁一起创建,activity中不保存fragment的快照
@Override
protectedvoid onSaveInstanceState(Bundle outState) {
// super.onSaveInstanceState(outState);
}
2, Activity和fragment销毁了,但是子线程中的网络请求由于比较慢,请求回复时activity都不在了,所以为null
解决方案:在activity销毁时取消网络请求
如果发现取消网络请求很麻烦的话,可以暂且通过getActivity()!=null暂且来判断处理下
本文探讨了在Fragment中遇到getActivity()返回null的问题,主要原因是Activity被系统回收而Fragment仍然存在。提出两种解决方案:一是避免在onSaveInstanceState中保存Fragment快照,二是确保在Activity销毁时取消网络请求,防止请求完成后找不到对应的Activity。

447

被折叠的 条评论
为什么被折叠?



