Android的性能优化方法

布局优化的思想很简单,就是尽量减少布局文件的层级,这样Android绘制时的工作量少了,程序的性能自然就高了。

一、有效的选择布局优化

        删除无用的控件和层级,有效的选择使用性能较低的ViewGroup,比如:RelativeLayout,如果布局中可以使用LinearLayout也可以使用RelativeLayout,那么就采用LinearLayout,因为RelativeLayout的功能比较复杂,它的布局过程需要花费更多的CPU时间。如果LinearLayout无法实现效果,需要多层嵌套,这种情况下建议使用RelativeLayout。因为层级多了,也会降低程序的性能

      采用<include>标签、<merge>标签和ViewStub,<include>主要用于布局重用,<merge>一般和<include>配合使用,merge标签存在的意义是帮助include标签排除多余的一层ViewGroup容器,减少view hierarchy的结构,提升UI渲染的性能,而ViewStub则提供了按需加载的功能,当需要是才会将ViewStub中的布局加载到内存,提高了程序的初始化效率。

二、绘制优化

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

    在onDraw中不要创建新的布局对象,因为onDraw方法可能会被频繁调用,这样就会在一瞬间产生大量的临时对象,这不仅占用了过多的内存还会导致系统更加频繁gc(垃圾回收),降低了程序的执行效率

  不要在onDraw方法中做耗时的任务以及成千上万的循环。

三、内存泄漏优化

 1,静态变量导致的内存泄漏:

 

 activity无法正常销毁,静态变量mContext引用了它,

2,单例模式导致的内存泄漏:主要注意单例模式的特点是其生命周期和Application保持一致

3,属性动画导致的内存泄漏:如果在activity中播放那种无限循环的动画并没有在onDestory中去停止,那么动画会一致播放下去,尽管已经无法在界面上看到动画效果了,这个时候activity的View会被动画持有,而View又持有了activity,最终activity无法释放。

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

响应速度优化的核心思想是避免在主线程中做耗时操作,但是有时候的确很多耗时操作怎么办?可以将这些耗时操作放在线程中去执行,即采用异步的方式执行耗时操作。

5,ListView和Bitmap优化:

     ListView要采用的ViewHolder并避免在getView中执行耗时操作;要根据列表的滑动状态来控制任务的执行效率,比如列表快速滑动时显然是不太合适开启大量的异步任务的;尝试开启硬件加速来使listView的滑动更加流畅

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

6,线程优化

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

性能优化小建议:

避免创建过多的对象

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

常量请使用static final 来修饰

适当使用软引用和弱引用

采用内存缓存和磁盘缓存

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值