Android 性能优化之旅3--内存分析工具的使用(下)

常见的性能优化的帮助工具:

MAT,
Memory Monitor(属于AndroidMonitor中一个模块),
HeapTool(查看堆信息),
Allaction Tracking,
LeakCanary
Lint工具

上一篇里面我们介绍了AndroidMonitor和MAT,HeapTool报告分析,那么今天继续介绍Allaction Tracking,LeakCanary以及Lint工具。

Allaction Tracking

追踪内存分配信息。可以很直观地看到某个操作的内存是如何进行一步一步地分配的。下面简单介绍一下,首先运行我们的项目,然后在AndroidMonitor的面板上面点击第三个图标,开始分析,在此之前我们也可以先手动GC多几遍,使得内存比较稳定:

工具栏.png

再次点击第三个图标,停止分析,那么AS会自动帮我们打开一个alloc文件,也可以查看饼状图(点击Group by Methd右边的饼状图图标),在这里你可能找不到自己的类的分配,这里我推荐大家使用DDMS。

Android 性能优化之旅3--内存分析工具的使用(下)_第1张图片
内存分配分析.png

如下图所示,打开DDMS,左边选择我们APP的进程,然后在右边的Allocation Tracker选项卡里面点击start Tracking,在这个期间我们旋转屏幕,使得LeakActivity有一个重新构建(分配内存)的过程。然后点击Get Allocations,然后点击stop Tracking结束采集过程。

Android 性能优化之旅3--内存分析工具的使用(下)_第2张图片
DDMS.png

在那么多的信息中,我们可以通过搜索过滤出我们自己的类,比如LeakActivity,在下面的面板中可以详细地看到我们LeakActivity在内存里面是如何被一步一步分配的,相信熟悉源码的朋友对于这些一定不会陌生,所以说这个工具对于追踪源码、学习源码很有意义。

Android 性能优化之旅3--内存分析工具的使用(下)_第3张图片
DDMS1.png

使用LeakCanary检测内存泄漏

Square公司的一个开源内存泄漏分析工具,是在手机上运行的,可以直接在手机端查看内存泄露的工具。

基本使用:

1、添加依赖。

        debugCompile 'com.squareup.leakcanary:leakcanary-android:1.5'
        releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'
        testCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.5'

2、在Application里面初始化。

        public class App extends Application {

            public static Context sContext;

            @Override
            public void onCreate() {
                super.onCreate();
                sContext = this;
                initLeakCanary();
            }

            private void initLeakCanary() {
                if (LeakCanary.isInAnalyzerProcess(this)) {
                    // This process is dedicated to LeakCanary for heap analysis.
                    // You should not init your app in this process.
                    return;
                }
                LeakCanary.install(this);
            }
        }

3、发生内存泄漏的时候,会自动弹出通知。

实现原理:两个进程,本质上还是用命令控制生成hprof文件分析检查内存泄露。
然后发送通知。
Application
install()
LeakCanary
androidWatcher()
RefWatcher
new AndroidWatcherExecutor() --->dumpHeap()/analyze()(--->runAnalysis())--->Hprof文件分析
new AndroidHeapDumper()
new ServiceHeapDumpListener

Lint分析工具(Eclipse时期就已经有的)

Android Studio很方便,很好用,你可以试试点击AS菜单栏上面的Analyze选项,然后点击Inspection Scope,然后选择你需要检测的范围(比如整个项目),然后AS会自动弹出下图所示的面板,在面板左边列出了一些问题,在右边列出了修改的建议等等,这里不详细介绍,大家自己慢慢操作体会一下,遇到不懂的单词百度翻译一下就好,所见即所得,啊哈。

Android 性能优化之旅3--内存分析工具的使用(下)_第4张图片
lint.png

Lint工具可以分析的东西比较多:

        检测资源文件是否有没有用到的资源。
        检测常见内存泄露
        安全问题SDK版本安全问题
        是否有费的代码没有用到
        代码的规范---甚至驼峰命名法也会检测
        自动生成的罗列出来
        没用的导包
        可能的bug

如果觉得我的文字对你有所帮助的话,欢迎关注我的公众号:

Android 性能优化之旅3--内存分析工具的使用(下)_第5张图片
公众号:Android开发进阶

我的群欢迎大家进来探讨各种技术与非技术的话题,有兴趣的朋友们加我私人微信huannan88,我拉你进群交(♂)流(♀)

你可能感兴趣的:(Android 性能优化之旅3--内存分析工具的使用(下))