关于Android性能优化,主要包括以下几点
- 布局优化
- 绘制优化
- 内存泄露优化
- 响应速度优化
- 线程优化
- ListView/RecyclerView优化
- Bitmap显示优化
- 其他杂七杂八的优化
布局优化
布局优化主要是通过减少布局文件的层级来实现。
- 删除布局中无用的控件和层次,有选择性的选择布局文件。
如能使用LinearLayout或者FrameLayout实现的,就不要选择使用RelativeLayout。因为RelativeLayout布 局需要消耗更多CPU计算时间。当然这是在同样的层级数量为前提的。
使用标签,include、ViewStub等。
ViewStub提供了按需加载的功能,当需要时才会将ViewStub中的布局加载到内存,提高了程序初始化效率。
避免过度绘制。如移除不必要的背景色
绘制优化
绘制优化主要指onDraw中要避免执行大量操作。
onDraw中不要创建新的临时对象。
因为onDraw方法可能会被频繁调用,导致一瞬间产生大量对象,这样不仅占用了过多内存,而且会导致系统频繁gc,降低了程序执行效率。
onDraw中不要做耗时任务,避免执行循环操作。
尽管每次循环都很轻量级,但是大量的循环仍然十分抢占CPU的时间片,这会造成View的绘制过程不流畅。
内存泄露优化
写代码的时候避免写出内存泄露的代码。使用工具分析潜在的内存泄露。
响应速度优化
响应速度优化核心思想就是避免在主线程做耗时操作。
耗时操作放到子线程,采用异步的方法来执行耗时操作。Android中,Activity在5s不能响应屏幕触摸事件或者键盘输入事件就会ANR。BroadcastReceiver在10s内未执行结束也会ANR。
线程优化
线程优化就是采用线程池的方式来避免内存中同时存在大量的Thread,线程池可以重用内部的线程,从而避免了线程的创建和销毁所带来的开销。同时线程池还能有效控制线程池的最大并发量,避免大量线程因互相抢占资源而导致阻塞现象的发生。
ListView/RecyclerView优化
listview使用contentview进行复用,而不是每一次都去new一个。
使用ViewHolder,避免每次都去findViewById()来获取控件。
如果item中有图片,在滑动过程中停止加载图片。
Bitmap优化
主要是对图片进行压缩处理。
其他杂七杂八的优化
Android中少使用枚举,枚举占的内存大。
常量使用static final修饰。
适当使用软引用和弱引用。
使用Android特有的数据结构,如SparseArray。
暂时就想到这么多啦。有遇到新的优化方案会继续更新上去。。。。。