Android设备受内存和CPU的限制,性能的优化显的十分重要,而性能优化一个重要的问题就是内存泄漏,内存泄漏不会导致程序功能异常,但会导致Android程序内存占用过大,会提高内存溢出的概率。今天就平时开发过程结合网上的资源总结一下一些有效的性能优化方法,主要内容包括布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView优化、Bitmap优化、线程优化及一些性能优化建议。
一:布局优化
布局的优化简单来说就是减少布局文件的层级。首先删除布局中的无用控件和层级然后选择性能较低的布局。如果你的布局种能用RalativeLayout也能用LinearLayout那么就采用LinearLayout,因为RelativeLayout的功能比较复杂,它的布局需要花费更多的CPU时间。另外,FrameLayout和LinearLayout一样都是一个简单高效的ViewGroup. 布局优化的另一个手段是采用标签。<merge> <include> 具体使用过程这里不做解释。这要知道这样使用的话会提高程序的初始化效率。
二:绘制优化
绘制优化主要是指View的onDraw方法要避免执行大量的操作。
1:onDraw中不要创建新的局部对象,因为onDraw方法可能会被频繁的调用,这样会产生大量的临时对象,这样不仅占用过多的内存而且会导致系统频繁的gc,降低了程序的执行效率。
2:在onDraw方法中不要做耗时的任务。
三:内存泄漏优化
参考上一篇文献:http://blog.csdn.net/lyjit/article/details/51007569
四:响应速度优化
响应速度优化的核心思想是避免在主线程中做耗时操作,尽量采用异步的方式去执行耗时操作。Android 规定,Activity如果5秒之内无法响应就会出现ANR,BroadcastReceiver如果10秒钟之内未执行完操作也会出现ANR。
五:ListView和iBitmap的优化
首先要采用ViewHolder并避免在getView中执行耗时操作;其次要根据列表的滑动状态来控制任务的执行效率,例如:当列表快速滑动时不能开启大量的异步任务;最后可以尝试开启硬件加速来是ListView的滑动更加流畅。
六:线程优化
线程优化的思想是采用线程池,避免程序中存在大量的Thread.线程池可以重用内部的线程,从而避免了线程的传键和销毁所带来的性能开销。同时线程池还能有效的控制线程池的最大并发数,避免阻塞现象。所以在开发的过程中要尽量采用线程池,而不是每次都要创建一个Thread对象。
七:一些性能优化的建议
1:避免创建过多的对象
2:不要过多的使用枚举,枚举占用的内存空间要比整型大
3:常量请使用static final 来修饰
4:使用一些Android特有的数据结构,比如 SparseArray 和 Pair等,它们都具有更好的性能
5:适当使用软引用和弱引用
6:采用内存缓存和磁盘缓存
7:尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄漏