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

Android机能优化之启动加快35%

发布时间:2019-09-25 14:34:39 所属栏目:业界 来源:kengsirLi
导读:一、媒介 跟着项目版本的迭代,App的机能题目会逐渐袒暴露来,而好的用户体验与机能示意细密相干,从本篇文章开始,我将开启一个Android应用机能优化的专题,从理论到拭魅战,从入门到深挖,手把手将机能优化实践到项目中,接待一连存眷! 那么第一篇文章我就
副问题[/!--empirenews.page--]

一、媒介

跟着项目版本的迭代,App的机能题目会逐渐袒暴露来,而好的用户体验与机能示意细密相干,从本篇文章开始,我将开启一个Android应用机能优化的专题,从理论到拭魅战,从入门到深挖,手把手将机能优化实践到项目中,接待一连存眷!

那么第一篇文章我就从应用的启动优化开始,按照现实案例,打造闪电般的App启动速率。

二、初识启动加快

来看一下Google官方文档《Launch-Time Performance》(https://ldeveloper.android.com/topic/performance/launch-time.html)对应用启动优化的概述;

应用的启动分为冷启动、热启动、温启动,而启动最慢、挑衅最大的就是冷启动:体系和App自己都有更多的事变要从新开始!

应用在冷启动之前,要执行三个使命:

  • 加载启动App;
  • App启动之后当即展示出一个空缺的Window;
  • 建设App的历程;

而这三个使命执行完毕之后会顿时执行以下使命:

  • 建设App工具;
  • 启动Main Thread;
  • 建设启动的Activity工具;
  • 加载View;
  • 部署屏幕;
  • 举办第一次绘制;

而一旦App历程完成了第一次绘制,体系历程就会用Main Activity替代已经展示的Background Window,此时用户就可以行使App了。

Android机能优化之启动加快35%

作为平凡应用,App历程的建设等环节我们是无法主动节制的,可以优化的也就是Application、Activity建设以及回调等进程。

同样,Google也给出了启动加快的偏向:

  • 操作提前展示出来的Window,快速展示出来一个界面,给用户快速反馈的体验;
  • 停止在启动时做麋集极重的初始化(Heavy app initialization);
  • 定位题目:停止I/O操纵、反序列化、收集操纵、机关嵌套等。

备注:偏向1属于治标不治本,只是外貌上快;偏向2、3可以真实的加速启动速率。

接下来我们就在项目中现实应用。

三、启动加快之主题切换

凭证官方文档的声名:行使Activity的windowBackground主题属性来为启动的Activity提供一个简朴的drawable。

Layout XML file:

Android机能优化之启动加快35%

Manifest file:

Android机能优化之启动加快35%

Android机能优化之启动加快35%

这样在启动的时辰,会先展示一个界面,这个界面就是Manifest中配置的Style,等Activity加载完毕后,再去加载Activity的界面,而在Activity的界面中,我们将主题从头配置为正常的主题,从而发生一种快的感受。不外如上文总结这种方法着实并没有真正的加快启动进程,而是通过交互体验来优化了展示的结果。

备注:截图同样来自官方文档《Launch-Time Performance》。

四、启动加快之Avoid Heavy App Initialization

通过代码说明我们可以获得App启动的营业事变流程图:

Android机能优化之启动加快35%

这一章节我们重点存眷初始化的部门:在Application以及首屏Activity中我们首要做了:

  • MultiDex以及Tinker的初始化,最先执行;
  • Application中首要做了各类三方组件的初始化;

项目中除听云之外别的全部三方组件都抢占先机,在Application主线程初始化。这样的初始化方法必定是过重的:

  • 思量异步初始化三方组件,不阻塞主线程;
  • 耽误部门三方组件的初始化;现实上我们粗粒度的把全部三方组件都放到异步使命里,也许会呈现WorkThread中尚未初始化完毕但MainThread中已经行使的错误,因此这种环境提议耽误到行使前再去初始化;
  • 而怎样开启WorkThread同样也有考究,这个话题在下文详谈。

项目修改:

  • 将友盟、Bugly、听云、GrowingIO、BlockCanary等组件放在WorkThread中初始化;
  • 耽误舆图定位、ImageLoader、自有统计等组件的初始化:舆图及自有统计耽误4秒,此时应用已经打开;而ImageLoader
  • 由于挪用相关不能异步以及过久耽误,初始化从Application耽误到SplashActivity;而EventBus由于再Activity中行使以是必需在Application中初始化。

Android机能优化之启动加快35%

留意:闪屏页的2秒逗留可以操作,把耗时操纵耽误到这个时距离断里。

五、启动加快之Diagnosing The Problem

本节我们现实定位耗时的操纵,在开拓阶段我们一样平常行使BlockCanary可能ANRWatchDog找耗时操纵,简朴明白,可是无法获得每一个要领的执行时刻以及更具体的比拟信息。我们可以通过Method Tracing可能DDMS来得到更全面具体的信息。

启动应用,点击 Start Method Tracing,应用启动后再次点击,会自动打开适才操纵所记录下的.trace文件,提议行使DDMS来查察,成果越发利便全面。

Android机能优化之启动加快35%

Android机能优化之启动加快35%

左侧为产生的详细线程,右侧为产生的时刻轴,下面是产生的详细要领信息。留意两列:Real Time/Call(现实产生时刻),Calls+RecurCalls/Total(产生次数);

(编辑:湖南网)

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

热点阅读