Android内存抖动——检测、常见场景、处理
2021-07-16 本文已影响0人
无问o
内存抖动
介绍:内存抖动是Android性能优化中内存优化的一种情况,主要是由于频繁的对象创建导致内存抖动,最终可能导致卡顿和OOM。
检测
demo:点击一次button,将会创建100000个对象,不断创建、GC回收(因为字符串拼接要创建StringBuilder对象)
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String str = "";
for(int i=0; i< 100000; i++) {
str += i;
}
}
});
利用Android Profiler进行检测:
Record截取一段时间进行分析:
可以看到创建了大量的StringBuilder对象,也就是在大循环中频繁创建对象,GC回收频繁,导致内存抖动。
总结:内存抖动可采用Android Profiler进行检测,可截取某段时间进行对象分析,查看哪些对象被频繁创建。
内存抖动常见场景
大循环中创建对象、自定义View的onDraw()方法中创建对象(屏幕绘制与动画执行时会频繁调用onDraw())。
处理方法
将对象创建放到循环外,对于无法避免的创建对象情况,可采用对象池模型进行缓存,复用对象,需注意用完后要手动释放对象池中对象。