Android性能优化方法

1.布局优化

布局优化的思想很简单,就是尽量减少布局文件的层级。

  1. 删除布局中无用的控件和层级,其次有选择的使用性能较低的ViewGroup。FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup,可以优先考虑使用。对于需要通过嵌套的方式来实现的界面,建议使用RelativeLayout。

  2. 采用include标签、merge标签和ViewStub。include标签主要用于布局重用,merge标签一般和include标签配合使用,它可以降低减少布局的层级,而ViewStub则提供了按需加载的功能,当需要时才将ViewStub中的布局加载到内存,提高了程序的初始化效率。

2.绘制优化

绘制优化是指View的onDraw方法要避免执行大量的操作。

  1. onDraw不要创建新的局部对象。
  2. onDraw不要执行耗时操作。

3.内存泄露优化

内存泄露的优化主要在于两个方面,一方面开发过程中避免写出有内存泄漏的代码,另一方面通过一些分析工具(如LeakCanary、MAT)找出潜在的内存泄漏的原因。

  1. 使用LeakCanary开源控件,可以很好的帮助我们发现内存泄露的情况
  2. 注意Activity的泄漏
    例如Handler导致的Activity泄漏,为了解决这个问题,可以在UI退出之前,执行remove Handler消息队列中的消息与runnable对象。或者是使用Static + WeakReference的方式来达到断开Handler与Activity之间存在引用关系的目的。

  3. 考虑使用Application Context而不是Activity Context

  4. 注意临时Bitmap对象的及时回收
  5. 注意监听器的注销
    在Android程序里面存在很多需要register与unregister的监听器,我们需要确保在合适的时候及时unregister那些监听器。

  6. 注意缓存容器中的对象泄漏

  7. 注意WebView的泄漏
    通常根治这个问题的办法是为WebView开启另外一个进程,通过AIDL与主进程进行通信,WebView所在的进程可以根据业务的需要选择合适的时机进行销毁,从而达到内存的完整释放。
  8. 注意Cursor对象是否及时关闭

4.ListView 和Bitmap优化

针对ListView的优化:

  1. 采用ViewHolder避免在getView中执行耗时操作
  2. 根据滑动状态来控制任务的执行频率,例如当列表快速滑动时显然不适合开启大量的异步任务。
  3. 可以尝试开启硬件加速来使滑动更流畅

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

5.线程优化

采用线程池,避免程序中存在大量的Thread。线程池可以重用内部的线程,从而避免了线程的创建和销毁带来的性能开销;同时线程池还可以有效的控制线程池的最大并发数,避免大量线程因互相抢占系统资源从而导致阻塞现象的出现。

6.优化建议

  1. 避免创建过多的对象
  2. 不要过多使用枚举,枚举占用的内存空间要比整型大
  3. 常量使用static final来修饰
  4. 使用一些Android特有的数据结构,比如SpareArray和Pair等,它们具有更好的性能
  5. 适当使用软引用和弱引用
  6. 采用内存缓存和磁盘缓存
  7. 尽量采用静态内部类,这样可以避免潜在的由于内部类导致的内存泄露
  8. 使用ProGuard来剔除不需要的代码
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值