Android App性能优化[译]

提升Android 应用性能

开发Android系统的应用程序,开发人员得到了不少的自由,App的拥有者也见证了用户的不断增加。不过,在此过程当中开发者也面对着不少应用开发的挑战。android

  • 开发人员发现不少Android os版本很难跟进开发。
  • 运行Android系统的设备类型有170+种,这也是Android开发一个巨大的挑战。每种设备有不一样的屏幕尺寸、摄像头按钮、键盘形式等等,使得开发成为一个噩梦。

记住如下几点,咱们能够在必定程度上提升咱们应用程序的性能。如下介绍会下降程序的性能的因素和咱们能够作的一些提高。网络

Slow Rendering

Slow Rendering 是最多见的性能问题。设计师但愿咱们作出的效果和咱们最后作出的效果多是不一样的, 若是过度追求可视化的效果,可能会致使开发的失败。app

渲染是根据时间来定义的,以保证60fps的平滑运行,不发生掉帧或者延时。异步

什么会引发Slow Rendering

系统每16ms尝试绘制一次界面,这意味着咱们的应用必须在16ms内完成全部的更新界面的逻辑。
工具

若是咱们的应用不能在16ms完成逻辑会怎么样呢:
布局

以上图中就是掉帧。举例来讲,若是咱们的逻辑处理时间消耗了24ms,就会发生掉帧。系统尝试去绘制新的一帧,可是更新逻辑尚未完成。因此系统只能不刷新界面。这使得用户看到的界面是32ms刷新而不是16ms。即便只掉了一帧,动画也会看出不够流畅。性能

如下的工具能够用于提升渲染效果

  1. Hierarchy Viewer
    Hierarchy Viewer是Android设备查看器中内嵌的一个工具,能够帮助咱们查看层级布局中各个View的属性和布局速度。它能够帮助咱们发现因为界面层级结构引发的性能问题,帮助咱们简化布局,减小过分绘制。优化

  2. GPU渲染模式分析
    GPU渲染模式分析能够快速可视化显示每一帧相对于16ms的实际绘制时间。动画

打开GUP渲染模式分析的方法以下:线程

  • 设置> 开发者工具
  • 在监控设置里选择GPU呈现模式分析
  • 在弹出的选择框中选择 在屏幕上显示为条形图
  • 打开须要调试的应用,能够看到表明着绘制时间的条形图📊。

屏幕上的横坐标显示时间的流动,纵坐标显示每帧的绘制时间。若是绘制时间超过了16ms的基准线,用户就会感受到应用卡顿。

应用启动时间

App启动有两种状况,每种启动状况会影响应用从图标到用户可见使用的时间。

冷启动

冷启动是指应用从0开始启动,即应用在设备重启或者在被系统kill掉以后的第一次启动。

在冷启动时,系统有三个任务:

  • 装置并启动App
  • 随着应用的启动当即展现一个黑色的启动窗口
  • 建立应用进程

热启动

相比冷启动,热启动更简单,消耗更小。在热启动中,系统的工做就是把activity放置到前台。若是应用中的全部Activity是保留在内存中,app就能够不用重复初始化对象,布局设置,和渲染。

如何解决应用启动延时的问题

  • 只初始化必要的对象,好比,能够把全局静态变量放置在单例模式中,这样应用在真正使用变量时才会初始化而不是在应用启动时。

  • 压扁应用层级,减小冗余的view和嵌套。

  • 资源初始化放置在异步线程中执行。

  • 让应用先加载并展现view,以后再更新view依赖于bitmap或者其余资源的属性。

布局

布局是App直接影响用户体验的一个重要部分。若是实现不合理,则在展现时致使内存资源紧张。每个在app中小部件或者布局,都须要执行初始化、布局、和绘制。好比:使用LinearLayout的嵌套实例可能会致使视图层次结构过深。

如何优化布局呢

  1. 优化布局层级
    使用基本的布局结构能够得到最有效的布局。然而,每个在app中小部件或者布局,都须要执行初始化、布局、和绘制。好比:使用LinearLayout的嵌套实例可能会致使视图层次结构过深。此外,嵌套多个使用了 layout_weight 属性的LiaearLayout会很是耗时,由于每一个child要被计算两次。这一点在布局被屡次加载时更要注意,好比在listview或者gridview中加载。

  2. 复用布局
    复用布局很是强大,容许咱们建立复杂的可复用的布局。好比,一个yes/no的button,一个自定义的进度条,或者一个Textview。也就是说能够单独提取、管理在多个布局中使用的通用元素,而后在layout中include它们。

  3. 按需加载视图
    有时咱们的布局中有些复杂的布局不多使用,不管是项目详细信息,进度指示器仍是撤消消息,能够经过仅在须要时加载视图来减小内存使用并加快渲染速度。

电池使用

电量使用也是Android开发中须要优化的一个很重要的部分,有助于用户的存留。

节约电量使用一些建议:

  • 减小网络请求的次数
  • 避免使用唤醒锁
  • 谨慎使用GPS
  • 谨慎使用Alarm 管理器
  • 使用批量调度
相关文章
相关标签/搜索