Android性能优化之卡顿优化

一.什么是卡顿

 APP使用起来卡顿,主要是用户在使用APP时的感知,主要表现在APP页面的刷新,滑动时的流畅度。例如用户在某个页面滑动时有明显卡住的现象就是卡顿了。开发中有一个16ms原则,即你的APP在16ms内没有更新完界面,用户就会有卡顿的感受。

二.哪些原因造成卡顿

 1.UI造成的卡顿

      (1)过于复杂的布局

      (2)过度绘制

      (3)动画

  2.主线程执行了耗时操作

  3.频繁的GC

三.怎么优化卡顿?

    1.UI卡顿优化

        (1)布局优化

           a.相同层级可实现的页面使用LineraLayout代替RelativeLayout,因为从源码中我们可以知道,

             LineraLayout在没有设置 weight属性的时候onMeasure()只执行一次,而RelativeLayout都要执行两次。

         b.复杂层级的布局可使用ConstraintLayout来减少层级,ConstraintLayout是一个非常强大的布局控件,很多相对复               杂的布局都可以使用ConstraintLayout一个层级就可以实现功能。

         c.使用merge标签:

             merge和include结合使用,可以减少布局层级,例如一个include的布局文件中:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

>

<TextView

android:layout_width="match_parent"

android:layout_height="wrap_content" />

<Button

android:layout_width="match_parent"

android:layout_height="wrap_content" />

</LinearLayout>

这里我们可以使用merge来代替LinearLayout,这样就等于减少了LinearLayout这一个层级。

 

         d.使用 ViewStub标签:

          ViewStub,是一个大小为0 ,默认不可见的控件,只有给他设置成了View.Visible或调用了它的inflate()之后才会填充布局资源,也就是说占用资源少。所以当我们有一些布局是在特定条件下才需要显示时就可以用ViewStub来减少布局的加载,比如我们最常用的空白页(即网络异常时的错误提示页面)。

      e.使用工具 Hierarchy Viewer来分析布局,查找可优化的地方。

  (2)过度绘制优化

    a.使用overdraw检测, 设置 -> 开发者选项 -> 调试GPU过度绘制 -> 显示GPU过度绘制,

      通过不同颜色来发现哪些地方过度绘制。

    b.移除不必要的background,比如我们整个页面的背景设置了白色,这样子控件如果再有是白色的就没有必要再设置背景色了。

    c.对于自定义的view要减少重复计算和绘制。

(3)动画优化

    a.有些酷炫的动画往往对性能要求比较高,所以可以采用分级方式,判断手机类型,低端手机减少动画。

 

 2.主线程耗时操作操作优化

   (1)主线程也叫UI线程主要的任务是处理用户交互、绘制界面、显示数据、消息处理等工作,如果耗时操作如请求网络数据、操作数据库、读取文件等就不能放在主线程来,可以开启子线程来操作。

 (2)使用线程池来代替单独创建子线程,因为频繁的创建和销毁线程很耗时,创建太多的子线程也会抢占主线程的CPU使用,从而导致卡顿。

3.频繁的GC优化

   (1)需要频繁操作字符串时使用 StringBuilder 。

 (2)new对象的时候要注意,尽量不要在需要频繁执行的地方New对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值