因为这个是面试必问的,在这做再一次的总结,希望能帮助到大家和我自己。
我觉得性能优化除了掌握必要的技术外,关键是细心,不厌其烦。
一、布局优化
删除布局中无用的控件和层次
FrameLayout好过LinearLayout好过RelativeLayout。能用一个控件完成不用两个控件
避免过度绘制
在多层次重叠的UI结构里面,如果不可见的UI也在做绘制操作,会导致某些像素区域被绘制了多次,这个主要是针对背景,在setBackground时看下是否多余
二、绘制优化
主要针对自定义View的onDraw方法要避免执行大量的操作
不要创建新的局部对象
如Paint能在初始化创建就不放到onDraw
不要做耗时的任务,也不能执行成千上万次的循环操作
三、内存泄漏优化
首先关于内存泄漏的理解:外部人为原因,无意识地持有对象引用,使得持有引用者的生命周期大于被引用者的生命周期
理解这话是关键,如我有静态变量,静态变量的创建需要context,这时我传了Activity的context,静态变量是和进程同样的生命周期,那是不是就算Activity关闭了,因为静态变量持有它,而导致它所占的内存就没办法被回收,也就任务内存泄漏
常见引发内存泄漏的原因:
1.集合类
虽然我不太认同集合类可以造成内存泄漏,但是如何集合元素对象是fragment或者activity,最好做下处理,进来在本界面操作。在合适的地方可以
// 释放objectList
objectList