android 性能分析
来源:互联网 发布:js select foreach 编辑:程序博客网 时间:2024/05/16 10:25
android性能分析
下载bug项目:https://github.com/lzyzsd/MemoryBugs,请注意配合使用MemoryMonitor, AllocationTracker以及HeapDump,LeakCanary等工具来查找潜在的内存问题,并尝试解决。
1.测试工具介绍
(1)memory monitor简介
AndroidStudio提供了Memory Monitor来实时显示应用运行时内存占用情况,下边蓝色部分是现在占用的内存,上面灰色的部分显示是已回收的内存。如果在图上看到尖峰,也就是快速分配内存又被回收,也就是发生了内存抖动,这里就是需要优化的地方。在模拟器或者真机中Debug项目,可实时监看Memory,CPU,NetWork等的资源占用情况。
(2)Allocation Tracker简介
单击Allocation tracker标签,就会打开一个新的窗口,单击“Start Tracing”按钮;然后,让应用运行你想分析的代码。运行完毕后,单击“Get Allocations”按钮,一个已分配对象的列表就会出现第一个表格中。
单击第一个表格中的任何一项,在表格二中就会出现导致该内存分配的栈跟踪信息。通过allocation tracker,不仅知道分配了哪类对象,还可以知道在哪个线程、哪个类、哪个文件的哪一行。
轮胎图是以圆心为起点,最外层是其内存实际分配的对象,每一个同心圆可能被分割成多个部分,代表了其不同的子孙,每一个同心圆代表他的一个后代,每个分割的部分代表了某一带人有多人,双击某个同心圆中某个分割的部分,会变成以你点击的那一代为圆心再向外展开。如果想回到原始状态,双击圆心就可以了。
2.案例分析
(1)内存波动
bug项目中存在内存波动,由案例中如下段代码产生:
for (int i = 0; i <10000; i++) {
Rect rect = new Rect(0, 0, 100,100);
System.out.println("-------:" + rect.width());
}
改进方案
修改将对象在循环体外创建,具体代码修改如下:
private Rectrect = new Rect(0, 0, 100, 100);
for (int i = 0; i <10000; i++) {
System.out.println("-------: " +rect.width());
}
(2)内存泄露
bug项目中使用Handler造成内存泄露的代码如下:
Handler mHandler = new Handler() {
@Override
public voidhandleMessage(Message msg) {
mImageView.setImageBitmap(mBitmap);
}
}
改进方案
public static class MyHandler extendsHandler {
WeakReference<MainActivity >mActivityReference;
MyHandler(MainActivity activity) {
mActivityReference= newWeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
final MainActivity activity= mActivityReference.get();
if (activity != null) {
return;
}
}
}
- Android画图性能分析
- android画图性能分析
- android画图性能分析
- android画图性能分析
- ListView性能分析--Android
- android 代码性能分析
- android画图性能分析
- Android 性能分析案例
- Android性能优化分析
- Android应用性能 分析
- android 性能分析小结
- Android 性能分析案例
- android 性能分析工具
- Android SQLite性能分析
- Android 性能分析案例
- Android 性能分析案例
- Android 性能分析案例
- Android应用性能分析
- 装饰设计模式
- CDOJ 1150 排名表
- 仿饿了么购买按钮之PurchaseButton
- LeetCode 268 Missing Number
- 安卓android布局的居中显示
- android 性能分析
- Linux下命令行安装配置android-sdk 下安装安卓插件
- hdu 5776 抽屉定理 判断子序列%m是否为0
- 支持向量机(SVM)三
- WEB安全杂谈
- avcodec.h(结构体AVPacket)
- Zookeeper安装和简单使用
- 双向链表解读
- D