WeakReference弱引用使用的坑,需要注意的点

Android中弱引用常常用于替代Context等强引用,是内存优化的一种方式,防止内存泄漏。

比如Handler中如果引用context,AndroidStudio会自动提醒开发者改为弱引用。

(这里我习惯性用弱引用替代强引用做内存优化,暂不讨论软引用Softreference)

弱引用的好处显而易见,开发者无需担心内存被占用没有及时释放导致的内存泄漏问题,但也会引发弱引用对象空指针问题NullPointerException。

因为Java的内存自动回收机制,当内存告警或弱引用长时间不用的话,频繁的GC就有可能将弱引用回收了,下次调用就会报空指针问题。当Android需要申请一大块内存的时候,这个弱引用可能就完蛋了,比如Activity的跳转,直播模块;再比如你写的代码导致了强引用崩溃释放了,service引用的context崩了。

解决这一问题,首先要管理好自己的代码,计算好内存,当需要申请大量内存的时候,要小心一些,再就是让Context不要崩。

其次就是做好判空处理,如果空了可以用单例思想重新new一下。(跟强引用还是有区别的)

最后,不要为了内存优化而优化,有些时候不需要。。。比如寄生于Context的模块或者组件,context没了自己也就释放了,完全没必要。

猜你喜欢

转载自blog.csdn.net/qq_24712507/article/details/109326903