1.内存泄漏
参考 Android内存泄漏
2.内存抖动
定义:内存抖动是由于短时间内有大量的对象被创建或者被回收导致的,它伴随着频繁的GC。GC会大量占用UI线程资源和CPU资源,会导致App整体的卡顿。
检测工具:
Memory Monitor :跟踪整个app的内存变化情况
Allocation Tracker :追踪内存对象的来源
Heap Viewer:查看当前内存快照,便于对比分析哪些对象有可能发生了泄漏
建议:
①尽量避免在循环中创建临时对象
②自定义View的onDraw()方法会被频繁的调用,不要再该方法中创建对象
③大量使用Bitmap时,将它们缓存在数组中实现复用
④对于能够复用的对象,使用对象池将它们缓存起来
3.布局优化
①父控件有背景颜色,同时满足条件时,子空间无须再设置;每个子控件都有自己的颜色且能够完全覆盖父控件时,父控件无须再添加背景颜色。
②尽量使用RelativeLayout来代替LinearLayout,减少View的层级。在View层级相同的情况下,尽量使用LinearLayout,因为RelativeLayout测绘比较费时。
③减少不必要的嵌套布局,使用include、merge标签加强复用、减少层级,使用viewstub按需加载。
④复杂页面使用ConstraintLayout,可有效减少层级
⑤onDraw()会被频繁的调用,该方法中不要创建局部对象,不要做耗时操作。