开发Android系统的应用程序,开发人员得到了不少的自由,App的拥有者也见证了用户的不断增加。不过,在此过程当中开发者也面对着不少应用开发的挑战。android
记住如下几点,咱们能够在必定程度上提升咱们应用程序的性能。如下介绍会下降程序的性能的因素和咱们能够作的一些提高。网络
Slow Rendering 是最多见的性能问题。设计师但愿咱们作出的效果和咱们最后作出的效果多是不一样的, 若是过度追求可视化的效果,可能会致使开发的失败。app
渲染是根据时间来定义的,以保证60fps的平滑运行,不发生掉帧或者延时。异步
系统每16ms尝试绘制一次界面,这意味着咱们的应用必须在16ms内完成全部的更新界面的逻辑。
工具
若是咱们的应用不能在16ms完成逻辑会怎么样呢:
布局
以上图中就是掉帧。举例来讲,若是咱们的逻辑处理时间消耗了24ms,就会发生掉帧。系统尝试去绘制新的一帧,可是更新逻辑尚未完成。因此系统只能不刷新界面。这使得用户看到的界面是32ms刷新而不是16ms。即便只掉了一帧,动画也会看出不够流畅。性能
Hierarchy Viewer
Hierarchy Viewer是Android设备查看器中内嵌的一个工具,能够帮助咱们查看层级布局中各个View的属性和布局速度。它能够帮助咱们发现因为界面层级结构引发的性能问题,帮助咱们简化布局,减小过分绘制。优化
GPU渲染模式分析
GPU渲染模式分析能够快速可视化显示每一帧相对于16ms的实际绘制时间。动画
打开GUP渲染模式分析的方法以下:线程
屏幕上的横坐标显示时间的流动,纵坐标显示每帧的绘制时间。若是绘制时间超过了16ms的基准线,用户就会感受到应用卡顿。
App启动有两种状况,每种启动状况会影响应用从图标到用户可见使用的时间。
冷启动是指应用从0开始启动,即应用在设备重启或者在被系统kill掉以后的第一次启动。
在冷启动时,系统有三个任务:
相比冷启动,热启动更简单,消耗更小。在热启动中,系统的工做就是把activity放置到前台。若是应用中的全部Activity是保留在内存中,app就能够不用重复初始化对象,布局设置,和渲染。
只初始化必要的对象,好比,能够把全局静态变量放置在单例模式中,这样应用在真正使用变量时才会初始化而不是在应用启动时。
压扁应用层级,减小冗余的view和嵌套。
资源初始化放置在异步线程中执行。
让应用先加载并展现view,以后再更新view依赖于bitmap或者其余资源的属性。
布局是App直接影响用户体验的一个重要部分。若是实现不合理,则在展现时致使内存资源紧张。每个在app中小部件或者布局,都须要执行初始化、布局、和绘制。好比:使用LinearLayout的嵌套实例可能会致使视图层次结构过深。
如何优化布局呢
优化布局层级
使用基本的布局结构能够得到最有效的布局。然而,每个在app中小部件或者布局,都须要执行初始化、布局、和绘制。好比:使用LinearLayout的嵌套实例可能会致使视图层次结构过深。此外,嵌套多个使用了 layout_weight
属性的LiaearLayout会很是耗时,由于每一个child要被计算两次。这一点在布局被屡次加载时更要注意,好比在listview或者gridview中加载。
复用布局
复用布局很是强大,容许咱们建立复杂的可复用的布局。好比,一个yes/no的button,一个自定义的进度条,或者一个Textview。也就是说能够单独提取、管理在多个布局中使用的通用元素,而后在layout中include它们。
按需加载视图
有时咱们的布局中有些复杂的布局不多使用,不管是项目详细信息,进度指示器仍是撤消消息,能够经过仅在须要时加载视图来减小内存使用并加快渲染速度。
电量使用也是Android开发中须要优化的一个很重要的部分,有助于用户的存留。
节约电量使用一些建议: