android性能优化

来源:互联网 发布:excel多个数据求和 编辑:程序博客网 时间:2024/06/05 20:38

背景:android程序无法向pc拥有超大的内存和高性能的CPU,故,当app过多的使用内存和CPU资源时,将会出现内存溢出,也就是所谓的oom,如果进行大量的耗时任务,将会使手机变得卡顿甚至程序无法响应,也及时ANR
性能优化:
布局优化,绘制优化,内存泄漏优化,响应速度优化,ListView优化,Bitmap优化,线程优化等

性能优化的重要问题就是内存泄漏,它不会导致功能异常,但是它却会到时app的内存占用过大,到时内存溢出的发生几率提高。

1布局优化:
尽量减少布局文件的层级。
首先删除布局中无用的控件和层级,其次选择地使用性能较低的ViewGroup,如一个布局可以使用RelativeLayout又可以使用LinearLayout那么推荐使用LinerLayout,这是因为RelativeLayout的功能比较复杂,它的布局过程需要花费更多的Cpu时间,FrameLayout和LinearLayout一样都是简单高效的ViewGroup.

布局优化的另一个手段就是采用、和ViewStub,前者用户布局复用,中间一般配合include使用,降低布局层级,而ViewStub则是提供了按需加载的功能,需要时才会加载到内存中去,这样就提高了初始化的效率。
ViewStub集成字View,它非常轻量级,宽和高都是0,但是它本身不参与任何布局和绘制的过程使用方法,但不支持merge标签:
1、findViewById().setVisible() 2、findViewById().inflate();

2绘制优化
在View的onDraw方法中要避免执行大量的操作
首先,onDraw中不要创建新的布局对象,这样就睡频繁的调用,产生大量的临时对象,到时系统更加频繁的gc,降低执行的效率。
其次,onDraw中不可做耗时任务,也不能执行成千上万次的循环操作,尽管循环是轻量级的,但是仍然十分的强占cpu时间片,造成view的不流畅

3内存泄漏优化
内存泄漏值得重视,一方面在开发过程中避免写出内存泄漏的代码,另一方面是通过一些分析工具如:MAT找到内存泄漏的潜在危险
泄漏场景:
1、 静态变量导致的内存泄漏
如,在activity中设置了静态的全局变量,而在其销毁的时候却不无法销毁这个静态的全局变量
2、 单例模式导致的内存泄漏
3、 属性动画导致的内存泄漏
每次使用该动画,需要在onDestory中使用animator.cancel()方法停止动画

4响应速度优化和ANR日志分析
响应速度优化核心思想就是不在主线程中进行耗时操作
当出现anr的时候,系统会在/data/anr目录下创建一个traces.txt

5 ListView和bitmap的优化
ListView使用ViewHolder进行复用convertView
在getView中不能执行耗时操作
Bitmap使用BitmapFactoru.Options来根据需要进行对图片进行采样。 inSampleSize

6线程优化
采用线程池,避免使用大量的Thread,线程池可以复用内部的线程,从而避免了线程的创建和销毁带来的性能开销,同时线程池还能有效的控制线程池的最大并发数

优化建议:
避免创建过多的对象
不要使用过多的枚举,枚举占用的内存空间要比整型大
常量使用static final来修饰
使用android特有的数据结构,如SparseArray和Pair等
适时的使用软弱引用
采用内存缓存和磁盘缓存策略
尽量采用静态内部类

原创粉丝点击