Android性能优化总结


一、布局优化
尽量减少布局文件的层级
1、<include>:可以将一个指定的布局文件加载到当前的布局文件中,布局重用
2、<merge>:去除多余的嵌套布局,一般与<include>一起使用,比如当前有一个竖直方向的LnearLayout通过<include>加载了一个以LinearLayout为根View的布局,那么<include>里面的LinearLayout就是多余的了,可以被删除
3、ViewStub:在开发应用程序的时候,经常会遇到这样的情况,会在运行时动态根据条件来决定显示哪个View或某个布局。那么最通常的想法就是把可能用到的View都写在上面,先把它们的可见性都设为View.GONE,然后在代码中动态的更改它的可见性。这样的做法的优点是逻辑简单而且控制起来比较灵活。但是它的缺点就是,耗费资源。虽然把View的初始可见View.GONE但是在Inflate布局的时候View仍然会被Inflate,也就是说仍然会创建对象,会被实例化,会被设置属性。也就是说,会耗费内存等资源。按需加载所需的布局文件,才程序初始时ViewStub中的布局不会被加载,只有当通过代码:((ViewStub)findViewById(id)).setVisibility(View.VISIBLE)
或((ViewStub)findViewById(id)).inflate()才能将ViewStub中View正在初始化并加载到相应位置
注:ViewStub只能加载,不能任意次数的加载、隐藏view

二、绘制优化
在自定义View的时候避免在View的onDraw方法中执行大量的操作,因为onDraw可能会被频繁地调用
1、onDraw中不要创建新的局部对象,频繁onDraw的时候会瞬间产生大量的临时对象
2、不要做耗时的任务(循环),尽量降低onDraw的复杂度

三、内存泄露优化
在Android中产生内存泄露的主要原因是context的泄露(避免写内存泄露的代码、通过MAT定位内存泄露的位置)
1、对 Activity 等组件的引用应该控制在 Activity 的生命周期之内; 如果不能就考虑使用 getApplicationContext 或者 getApplication,以避免 Activity 被外部长生命周期的对象引用而泄露。
2、尽量不要在静态变量或者静态内部类中使用非静态外部成员变量(包括context ),即使要使用,也要考虑适时把外部成员变量置空;也可以在内部类中使用弱引用来引用外部类的变量。
3、对于生命周期比Activity长的内部类对象,并且内部类中使用了外部类的成员变量,可以这样做避免内存泄漏:
    将内部类改为静态内部类
    静态内部类中使用弱引用来引用外部类的成员变量
4、Handler 的持有的引用对象最好使用弱引用,资源释放时也可以清空 Handler 里面的消息。比如在 Activity onStop 或者 onDestroy 的时候,取消掉该 Handler 对象的 Message和 Runnable.
5、在 Java 的实现过程中,也要考虑其对象释放,最好的方法是在不使用某对象时,显式地将此对象赋值为 null,比如使用完Bitmap 后先调用 recycle(),再赋为null,清空对图片等资源有直接引用或者间接引用的数组(使用 array.clear() ; array = null)等,最好遵循谁创建谁释放的原则。
6、正确关闭资源,对于使用了BraodcastReceiver,ContentObserver,File,游标 Cursor,Stream,Bitmap等资源的使用,应该在Activity销毁时及时关闭或者注销。
7、保持对对象生命周期的敏感,特别注意单例、静态对象、全局性集合等的生命周期。
8、对于无限循环的属性动画,当Activity结束的时候,要在onDestory中调用animator.cancel结束动画,不然动画仍然不会结束

四、响应速度优化避免ANR
主线程的响应时间为5秒
BroadcasReceiver的响应时间为10秒
当一个进程发生ANR以后,系统会在/data/anr目录下创建一个traces.txt,通过分析这个文件就能定位出ANR的原因了

五、ListView和Bitmap优化
ListView的优化主要是:
1、采用ViewHolder进行view重用,避免在getView中进行耗时操作
2、尽量在滑动停止后再开启异步加载任务
3、尝试开启硬件加速来使ListView的滑动更加流畅
Bitmap优化:
主要是避免将Bitmap的原图加载进内存,通过BitmapFactory.Options对图片进行裁剪后再加载进内存

六、线程优化
尽量采用线程池代替普通线程线程的频繁启动与关闭


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值