Android性能优化

作者: lucas777 | 来源:发表于2018-08-20 20:54 被阅读73次

    Android设备作为一种移动设备,无论是内存还是CPU的性能都受到了很大的限制,这导致Android程序的性能问题异常突出,对于性能优化提出了更高的要求.

    Android性能优化的方面主要包含以下几方面:

    • 布局优化
    • 绘制优化
    • 内存泄漏优化
    • 响应速度优化
    • ListView/RecycleView及Bitmap优化
    • 线程优化
    • 其他性能优化及建议

    1.布局优化

    尽量减少布局文件的层级.

    • 如何进行布局优化?

      删除布局中无用的控件和层次,有选择地使用性能比较低的ViewGroup.

      关于有选择地使用性能比较低的ViewGroup,这就需要我们开发就实际灵活选择了。

      例如:如果布局中既可以使用LinearLayout也可以使用RelativeLayout,那么就采用LinearLayout,这是因为RelativeLayout的功能比较复杂,它的布局过程需要花费更多的CPU时间。FrameLayout和LinearLayout一样都是一种简单高效的ViewGroup,因此可以考虑使用它们,但是很多时候单纯通过一个LinearLayout或者FrameLayout无法实现产品效果,需要通过嵌套的方式来完成。这种情况下还是建议采用RelativeLayout,因为ViewGroup的嵌套就相当于增加了布局的层级,同样会降低程序的性能。

    • 采用<include>标签,<merge>标签,ViewStub.

      <include>标签主要用于布局重用。

      <merge>标签一般和<include>配合使用,可以降低减少布局的层级。

      ViewStub提供了按需加载的功能,当需要时才会将ViewStub中的布局加载到内存,提高了程序初始化效率。

      关于它们的使用方法,参考:Android布局优化之include、merge、ViewStub的使用https://link.jianshu.com/?t=http://www.sunnyang.com/418.html

    • 避免过度绘制

      过度绘制(Overdraw)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次重叠的 UI 结构里面,如果不可见的 UI 也在做绘制的操作,会导致某些像素区域被绘制了多次,同时也会浪费大量的 CPU 以及 GPU 资源。

      如下所示,有些部分在布局时,会被重复绘制。


      关于过度绘制产生的一般场景及解决方案,参考:Android 过度绘制优化

    2.绘制优化

    绘制优化是指View的onDraw方法要避免执行大量的操作,这主要体现在两个方面:

    • onDraw中不要创建新的局部对象。

      因为onDraw方法可能会被频繁调用,这样就会在一瞬间产生大量的临时对象,这不仅占用了过多的内存而且还会导致系统更加频繁gc,降低了程序的执行效率。

    • onDraw方法中不要做耗时的任务,也不能执行成千上万次的循环操作,尽管每次循环都很轻量级,但是大量的循环仍然十分抢占CPU的时间片,这会造成View的绘制过程不流畅。

    按照Google官方给出的性能优化典范中的标准,View的绘制频率保证60fps是最佳的,这就要求每帧绘制时间不超过16ms(16ms = 1000/60),虽然程序很难保证16ms这个时间,但是尽量降低onDraw方法中的复杂度总是切实有效的。


    2.内存泄漏优化

    内存泄漏是开发过程中的一个需要重视的问题,但是由于内存泄露问题对开发人员的经验和开发意识有较高的要求,因此也是开发人员最容易犯的错误之一。

    内存泄露的优化分为两个方面:

    • 在开发过程中避免写出有内存泄漏的代码
    • 通过一些分析工具比如MAT来找出潜在的内存泄露,然后解决。

    对应于两种不同情况,一个是了解内存泄漏的可能场景以及如何规避,二是怎么查找内存泄漏。

    1. 那么我们就先了解什么是内存泄漏?这样我们才能知道如何避免。
    2. 那么我们就先了解什么是内存泄漏?这样我们才能知道如何避免。

    相关文章

      网友评论

        本文标题:Android性能优化

        本文链接:https://www.haomeiwen.com/subject/gxkriftx.html