布局优化
减少布局层次,单一可以用
LinearLayout
解决的页面不用RelativeLayout
,如果布局复杂,则用RelativeLayout
更好,毕竟比起布局嵌套,这种会好些<include>
标签使用,主要用于布局重用需要注意的是:此标签内,如果外面指定了
id
里面跟布局也定义id
以外部定义为准。同时如果里面定义了 类似于android:layout_width="wrap_content"
的属性,需配套android:layout_height="wrap_content"
同时使用。<merge>
标签一般和<include>
标签配合使用。一般如果当前根布局例如是:LinearLayout
,include
的布局也是LinearLayout
,那么include
的根布局就可以使用<merge>
标签代替LinearLayout
.<ViewStub>
标签,意义为按需加载,轻量级,宽和高都是0,在实际开发中,有很多布局在正常情况下不会显示,比如网络异常的布局,这个时候没有必要在布局加载时就加载进来,通过<ViewStub>
就可以在需要用到的时候再加载,提高程序初始化的性能。
绘制优化
在
onDraw()
中不要创建新的局部对象,这是因为onDraw()
可能会频繁的调用,这样就会在一瞬间产生大量的临时对象,这不仅占用过多的内存而且会导致系统频繁的gc, 降低程序的执行效率; 另外也不能做一些耗时的任务。内存泄漏优化
静态变量导致的内存泄漏
例如:
1
2
3
4
5
6
7
8
9private static Context mContext;
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_combine);
mContext = this;
}单例模式导致的内存泄漏
属性动画导致的内存泄漏
Android 3.0 之后,提供了属性动画,如果开启无限循环动画,隐藏后,未调用
animator,cancel()
来停止动画,也会发生内存泄漏,因为这个时候Activity
的View
被动画所持有,而View
又持有Activity
, 最终Activity
无法释放。0-
响应速度优化和ANR日志
响应速度优化的核心是避免在主线程做耗时操作,
Activity
5s 未做出响应,Service
10s未做出响应,就会出现 ANR ,查看\data\anr
目录下的trace,txt
文件分析产生 ANR 的原因线程优化
线程优化一般都是采用线程池,避免程序中存在大量的 Thread, 线程池可重用内部的线程,从而避免线程的创建和销毁所带来的性能开销。
性能优化
-------------本文结束感谢您的阅读-------------