LeakCanary检测内存泄漏

内存泄漏原因:
线程造成的内存泄漏
Handler造成的内存泄漏
单例导致内存泄露
静态变量导致内存泄露
非静态内部类导致内存泄露
未取消注册(BroadcastReceiver )或回调导致内存泄露
Timer和TimerTask导致内存泄露
集合中的对象未清理造成内存泄露
资源未关闭或释放导致内存泄露
属性动画造成内存泄露
WebView造成内存泄露
 
 

添加依赖:

 implementation 'com.squareup.leakcanary:leakcanary-android:1.6.3'
public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        if (LeakCanary.isInAnalyzerProcess(this)) {//1
            // This process is dedicated to LeakCanary for heap analysis.
            // You should not init your app in this process.
            return;
        }
        LeakCanary.install(this);

    }
}

要开启sd卡权限

 Android内存优化策略:

1)在循环内尽量不要使用局部变量
2)不用的对象即时释放,即指向NULL
3)数据库的cursor即时关闭。
4)构造adapter时使用缓存contentview
5)调用registerReceiver()后在对应的生命周期方法中调用unregisterReceiver()
6)即时关闭InputStream/OutputStream。
7)android系统给图片分配的内存只有8M, 图片尽量使用软引用, 较大图片可通过BitmapFactory缩放后再使用,并及时recycle
8)尽量避免static成员变量引用资源耗费过多的实例。
原文地址:https://www.cnblogs.com/Ocean123123/p/11025138.html