Fragment中调用getActivity为null的问题

本文探讨了在Fragment中遇到getActivity()返回null的问题,主要原因是Activity被系统回收而Fragment仍然存在。提出两种解决方案:一是避免在onSaveInstanceState中保存Fragment快照,二是确保在Activity销毁时取消网络请求,防止请求完成后找不到对应的Activity。

最近在友盟上经常看到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暂且来判断处理下

 

 


评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值