初探Android内存泄漏

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_32216895/article/details/62886096

清晨醒来困意无,依窗远望,孰知二月嫣花下江南。《乡村二月十二日晨 · 晨曦》----- 李

对象的生命周期本该结束的时候,这个对象还被一系列的引用,这就会导致内存泄漏。随着泄漏的累积,将消耗完系统内存造成卡顿或者闪退。

内存泄漏:
忘记释放分配的内存导致
逻辑内存泄漏:
当内存不在需要这个对象,但该对象的引用未进行释放,

导致内存无法被GC进行回收

25252525252525252525252525252525********************************************************

具体场景:

场景1、静态变量持有Activity
场景2、匿名内部类或非静态内部类引起的内存泄漏
场景3、Handler持有Activity的引用

解决方法
场景1、若无特殊要求,将静态变量改为一般变量
场景2、将非静态内部类/匿名内部类替换成静态内部类,这样就不会持有外部类的引用了
场景3、在Activity生命周期结束时,onDestory()调用
handler.removeCallbackAndMessages(null) 清空消息 队列

总结:


定义变量的时候,慎用static,例如若使用静态的集合,集合中的数据都不会被回收
及时回收需要回收的资源,如bitmap,cursor等
使用非静态内部类或匿名内部类的时候要注意

检测内存泄漏的工具 LeakCanary

        LeakCanary使用教程中文版      https://www.liaohuqiu.net/cn/posts/leak-canary-read-me/

猜你喜欢

转载自blog.csdn.net/qq_32216895/article/details/62886096