android性能优化小结

来源:互联网 发布:社交软件用户数据 编辑:程序博客网 时间:2024/05/18 16:18

第一次写文章,主要是记忆自己看书的总结

android性能优化方法

1.布局优化

布局优化的思想很简单,就是尽量减少布局文件的层级,布局中的层级少了,就意味着android绘制时的工作量少了,那么程序的性能自如就提高了。

如何优化?首先删除布局中无用的控件和层级,其次有选择地使用性能较低的ViewGroup,比如RelativeLayout。如果布局中既可以使用LinearLayout也可以使用RelativeLayout,那么就采用LinearLayout,这个因为RelativeLayout的功能比较复杂,它的布局过程需要花费更多的CPU时间,FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup。如果需要通过嵌套的方式完成,这种情况建议采用RelativeLayout,ViewGroup的嵌套就相当于增加了布局的层级,同样会降低程序的性能。

布局优化的另外一种手段是采用<include><merge>和ViewStub。<include>标签主要用于布局重用,<merge>标签一般和<include>配合使用,它可以降低减少布局的层级,而ViewStub则提供了按需求加载的功能,当需要时才会将ViewStub中的布局加载到内存,这提高了程序的初始化效率。

2.绘制优化

绘制优化是指View的onDraw方法要避免执行大量的操作,主要体现在这两个方面:

首先,onDraw中不要创建新的局部对象,这个因为onDraw方法可能会被频繁调用,这样就会一瞬间产生大量的临时对象,不仅占用了过多的内存而且还会导致系统更加频繁gc,降低了程序的执行效率。

另外一方面,onDraw方法中不要做耗时的任务,也不能执行成千上万的循环操作,尽管每次循环都很轻量级,但是大量的循环仍然十分抢占CPU的时间片,这样会造成View的绘制过程不流畅。

3.内存泄露优化

内存泄露在开发过程中是一个需要重视的问题。内存泄露的优化分两个方面,一方面是在开发中避免写出内存泄露的代码,另外一方面是用过一些分析工具比如MAT来找出潜在的内存泄露继而解决。

场景一: 静态变量导致的内存泄露 

场景二:单例模式导致的内存泄露(单例模式的特点是其生命周期和Application保持一致) 

场景三:属性动画导致的内存泄露(在onDestroy中停止动画)

4.响应速度优化和ANR日志分析

响应速度优化的核心思想是避免在主线程中做耗时操作。发生了ANR,系统会在/data/anr目录下创建一个文件traces.text,通过分析这个文件可以定位ANR的原因。

5.Lisview和Bitmap优化

ListView的优化主要分为三个方面:首先要采用ViewHolder并避免在getView中执行耗时操作;其次要根据列表的滑动状态来控制任务的执行频率,比如当列表快速滑动时陷入是不太合适开启大量的异步任务;最后可以尝试开启硬件加速来使ListView的滑动更加流畅。ListView的优化策略完全适用于GridView。

Bitmap的优化主要是用过BitmapFactory.Options来根据需要对图片进行采样,采样过程中主要用到了BitmapFactory.Options的inSampleSize参数。

6.线程优化

线程优化的思想是采用线程池,避免程序中存在大量的Thread。线程池可以重用内部的线程,从而避免了线程的创建和销毁所带来的性能开销,同时线程池还能有效的控制线程池的最大并发数,避免大量的线程因互相抢占系统资源从而导致阻塞现象的发生。因此,在实际开发中,我们尽量采用线程池,而不是每次都要创建一个Thread对象。

7.一些性能优化建议

避免创建过的对象

不要过多的使用枚举,枚举占用的内存空间比整型大

常量请使用static final来修饰

使用一些Android特有的数据结构,比如SparseArray和Pair等,它们都是具有更好的性能

适当使用软引用和弱引用

采用内存缓存和磁盘缓存

尽量采用静态内部类,这样可以避免潜在的由于内部类而导致的内存泄露

0 0
原创粉丝点击