加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 业界 > 正文

Android APP 性能优化的一些思考

发布时间:2019-09-18 16:26:40 所属栏目:业界 来源:斜杠Allen
导读:说到 Android 体系手机,大部门人的印象是用了一段时刻就变得有点卡顿,有些措施在运行时代莫名其妙的呈现瓦解,打开体系文件夹一看,发明多了许多文件,然后用手机管家 APP 不绝地举办整理优化 ,才感受运行速率轻微进步了点,就算手机在各类机能跑分软件

真正把必要表现的数据渲染到屏幕上,是通过体系级历程中的 SurfaceFlinger 处事来实现的,那么这个SurfaceFlinger 处事首要做了哪些事变呢?如下:

  • 相应客户端变乱,建设 Layer 与客户端的 Surface 成立毗连。
  • 吸取客户端数据及属性,修改 Layer 属性,如尺寸、颜色、透明度等。
  • 将建设的 Layer 内容革新到屏幕上。
  • 维持 Layer 的序列,并对 Layer 最终输出做出裁剪计较。

既然是两个差异的历程,那么必定是必要一个跨历程的通讯机制来实现数据转达,在 Android 表现体系中,行使了 Android 的匿名共享内存:SharedClient,每一个应用和 SurfaceFlinger 之间城市建设一个SharedClient ,然后在每个 SharedClient 中,最多可以建设 31 个 SharedBufferStack,每个 Surface 都对应一个 SharedBufferStack,也就是一个 Window。

一个 SharedClient 对应一个Android 应用措施,而一个 Android 应用措施也许包括多个窗口,即 Surface 。也就是说 SharedClient 包括的是 SharedBufferStack的荟萃,个中在表现革新机制顶用到了双缓冲和三重缓冲技能。最后总结起来表现整体流程分为三个模块:应用层绘制到缓存区,SurfaceFlinger 把缓存区数据渲染到屏幕,因为是差异的历程,以是行使 Android 的匿名共享内存 SharedClient 缓存必要表现的数据来到达目标。

除此之外,我们还必要一个名词:FPS。FPS 暗示每秒转达的帧数。在抱负环境下,60 FPS 就感受不到卡,这意味着每个绘制时长应该在16 ms 以内。可是 Android 体系很有也许无法实时完成那些伟大的页面渲染操纵。Android 体系每隔 16ms 发出 VSYNC 信号,触发对 UI 举办渲染,假如每次渲染都乐成,这样就可以或许到达流通的画面所需的 60FPS。假如某个操纵耗费的时刻是 24ms ,体系在获得 VSYNC 信号时就无法正常举办正常渲染,这样就产生了丢帧征象。那么用户在 32ms 内看到的会是统一帧画面,这种征象在执动作画或滑动列表较量常见,尚有也许是你的 Layout 过分伟大,层叠太多的绘制单位,无法在 16ms 完成渲染,最终引起革新不实时。

卡顿基础缘故起因

按照Android 体系表现道理可以看到,影响绘制的基础缘故起因有以下两个方面:

  • 绘制使命太重,绘制一帧内容耗时太长。
  • 主线程太忙,按照体系转达过来的 VSYNC 信号来时还没筹备好数据导致丢帧。

绘制耗时太长,有一些器材可以辅佐我们定位题目。主线程太忙则必要留意了,主线程要害职责是处理赏罚用户交互,在屏幕上绘制像素,并举办加载表现相干的数据,以是出格必要停止任何主线程的工作,这样应用措施才气保持对用户操纵的即时相应。总结起来,主线程首要做以下几个方面事变:

  • UI 生命周期节制
  • 体系变乱处理赏罚
  • 动静处理赏罚
  • 界面机关
  • 界面绘制
  • 界面革新

除此之外,应该只管停止将其他处理赏罚放在主线程中,出格伟大的数据计较和收集哀求等。

机能说明器材

机能题目并不轻易复现,也欠好定位,可是真的遇到题目照旧必要去办理的,那么说明题目和确认题目是否办理,就必要借助响应的的调试器材,好比查察 Layout 条理的 Hierarchy View、Android 体系上带的 GPU Profile 器材和静态代码搜查器材 Lint 等,这些器材对机能优化起到很是重要的浸染,以是要认识,知道在什么场景用什么器材来说明。

1,Profile GPU Rendering

在手机开拓者模式下,有一个卡顿检测器材叫做:Profile GPU Rendering,如图:

Android APP 机能优化的一些思索

它的成果特点如下:

  • 一个图形监测器材,能及时回响当前绘制的耗时
  • 横轴暗示时刻,纵轴暗示每一帧的耗时
  • 跟着时刻推移,从左到右的革新泛起
  • 提供一个尺度的耗时,假如高于尺度耗时,就暗示当前这一帧丢失

2,TraceView

TraceView 是 Android SDK 自带的器材,用来说明函数挪用进程,可以对 Android 的应用措施以及 Framework 层的代码举办机能说明。它是一个图形化的器材,最终会发生一个图表,用于对机能说明举办声名,可以说明到每一个要领的执行时刻,个中可以统计出该要领挪用次数和递归次数,现实时长等参数维度,行使很是直观,说明机能很是利便。

3,Systrace UI 机能说明

Systrace 是 Android 4.1及以上版本提供的机能数据采样和说明器材,它是通过体系的角度来返回一些信息。它可以辅佐开拓者网络 Android 要害子体系,如 surfaceflinger、WindowManagerService 等 Framework 部门要害模块、处事、View体系等运行信息,从而辅佐开拓者更直观地说明体系瓶颈,改造机能。Systrace 的成果包罗跟踪体系的 I/O 操纵、内核事变行列、CPU 负载等,在 UI 表现机能说明上提供很好的数据,出格是在动画播放不流通、渲染卡等题目上。

优化提议

1,机关优化

机关是否公道首要影响的是页面丈量时刻的几多,我们知道一个页面的表现丈量和绘制进程都是通过递回来完成的,多叉树遍历的时刻与树的高度h有关,那时刻伟大度 O(h),假如层级太深,每增进一层则会增进更多的页面表现时刻,以是机关的公道性就显得很重要。

那机关优化有哪些要领呢,首要通过镌汰层级、镌汰丈量和绘制时刻、进步复用性三个方面入手。总结如下:

  • 镌汰层级。公道行使 RelativeLayout 和 LinerLayout,公道行使Merge。
  • 进步表现速率。行使 ViewStub,它是一个看不见的、不占机关位置、占用资源很是小的视图工具。
  • 机关复用。可以通过 标签来进步复用。

尽也许罕用wrap_content。wrap_content 会增进机关 measure 时计较本钱,在已知宽高为牢靠值时,不消wrap_content 。

删除控件中无用的属性。

2,停止太过绘制

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读