一、Android Studio-Memory Monitor
使用方法
run起你的项目,找到Memory Monitor窗口,选择Memory
[转]内存变化波形图
另外,还可选择查看CPU和GPU还有NetWork的使用情况。
网络使用波形图.png
其中NetWork的频繁使用是造成应用耗电的关键,70%左右的电量是被上报数据,检查位置信息,定时检索后台广告信息所使用掉的。如何平衡这两者的电量消耗,就显得非常重要了。
二、Android Studio 1.5 Preview 新玩具-Heap Snapshot
使用方法
同样run起项目,进行一些操作之后点击左下角‘Dump Java Heap’的按钮
每次点击之后会生成一个.hprof的文件
点击一个.hprof文件,查看右侧的analyzer test,能看到两个选项
一个是‘Detect Leaeked Activites’,另一个是'Find Duplicate Strings',点击右上角的绿色播放按钮,会自动分析heap dump去定位泄露的activity和重复的string,出现如下的Analysis Results。
该面板里的信息可以有三种类型:app heap/image heap/zygote heap.
分别代表app 堆内存信息,图片堆内存信息,zygote进程的堆内存信息。
各属性中英文对照表
名称 | Total Count | Heap Count | Sizeof | Shallow size | Retained Size |
---|---|---|---|---|---|
意义 | 内存中该类的对象个数 | 堆内存中该类的对象个数 | 物理大小 | 对象本身占有内存大小 | 释放该对象后,节省的内存大小 |
名称 | depth | Shallow Size | Dominating Size |
---|---|---|---|
意义 | 深度 | 对象本身内存大小 | 管辖的内存大小 |
三、Eclipse-Allocation Tracker(分配跟踪器)
使用方法
点击“Start Tracking”,在应用中执行某个操作,然后点击“Get Allocations”。
Allocation Tracker
特点
a.需要进行间断的操作
b.可定位到具体某一行代码
四、hierarchyviewer
使用hierarchyviewer查看需要检查的页面的层次,检查页面最深层数, 官方建议最好控制在10层以内
hierarchyviewer
布局层级优化方案:
1). 自定义控件使用merge标签来减少不必要的根节点;
2).使用drawbleleft,代替多添加一个imageview;
3).有时使用relativelayout会比linearlayout需要更少层次就能达到实现效果;
4).使用viewstub来隐藏控件,ViewStub中的布局只有在你需要的时候才会渲染到主界面中;
...
五、leakcanary(Android 和 Java 内存泄露检测框架)
AndroidStudio
https://github.com/square/leakcanary
Eclipse
https://github.com/SOFTPOWER1991/LeakcanarySample-Eclipse
六、手机设置->开发者选项
1. Show GPU Overdraw
Show GPU Overdraw
蓝色,淡绿,淡红,深红代表了4种不同程度的Overdraw情况,我们的目标就是尽量减少红色Overdraw,看到更多的蓝色区域。
优化方案:
Overdraw有时候是因为你的UI布局存在大量重叠的部分,还有的时候是因为非必须的重叠背景。例如某个Activity有一个背景,然后里面 的Layout又有自己的背景,同时子View又分别有自己的背景。仅仅是通过移除非必须的背景图片,这就能够减少大量的红色Overdraw区域,增加 蓝色区域的占比。这一措施能够显著提升程序性能。
Profile GPU Rendering - 选中On screen as bars的选项
每一条柱状线都包含三部分,蓝色代表测量绘制Display List的时间,红色代表OpenGL渲染Display List所需要的时间,黄色代表CPU等待GPU处理的时间。
中间有一根绿色的横线,代表16ms,我们需要确保每一帧花费的总时间都低于这条横线,这样才能够避免出现卡顿的问题。