发现内存泄露

发现内存泄露

内存泄露问题发现困难,解决容易。大部分内存泄露都是activity的泄露导致的,细分的话又可以分为以下几类:
* 注册/解注册(包括广播、各种系统监听或者自定义监听)
* 单例中的context等
* cursor泄露
* 静态变量

1.人(苦)工(逼)监测

适用于非常简单的项目,比较粗略:
利用Eclipse DDMS或者Android Studio中提供的Memory Monitor检测,配合自动化测试工具或者人工反复进入退出某个activity,观察内存趋势来判断该界面是否有内存泄露。

2. StrictMode

适用于一般项目:
利用android提供的StrictMode监测内存泄露,当出现类存泄露时,通过adb logcat -s StrictMode命令可以过滤出类似以下样式的log:
android.os.StrictMode$InstanceCountViolation: class com.your.package.name.xxxActivity; instances=2; limit=1
再配合方法1抓取hprof文件以分析泄露原因。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
        StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder().detectAll  ().penaltyLog().build());
        StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder().detectAll  ().penaltyLog().build());
     }

3.LeakCanary

适用于所有项目:
利用大名鼎鼎的LeakCanary查找内存泄露,该工具可以配合monkey等自动化测试工具。在出现内存泄露时通知栏会显示泄露的地方,并可以查看详细的泄露路径。LeakCanary的使用参考Android Studio中LeakCanary的使用

你可能感兴趣的:(性能,Android)