Android 性能优化【篇五:应用启动分析流程】

Android 性能优化【篇五:应用启动分析流程】 本篇主要围绕Android性能优化应用启动类性能问题为主题先结合MTK的文档阐述应用启动流程然后结合MTK的分析思路其他厂商的思路和我之前有段时间研究过某音的TOP300分析思路的案例进行说明。一、APP启动流程所谓冷启动就是启动该应用时后台没有该应用的进程此时系统会为该应用创建新的进程之后会bindApplication来创建程并初始化application, 然后通过反射执行ActivityThread中的main方法。而热启动则是当启动应用时后台已经存在该应用的进程比如启动该应用后再按home 键反馈至主界面后再打开该应用。此时会从已有的进程中来启动应用这种方式不会重新走bindApplication的动作。参考链接https://online.mediatek.com/apps/quickstart/QS00157#QSS037551、冷启动当我们点击桌面APP图标的时候首先会调用launcher的onClick()方法然后在桌面应用程序内部会通过添加intent.addflag(Intent.FLAG_ACTIVITY_NEW_TASK)调用Activity类的startActivity方法先pause前台的launcher然后resume想启动想要启动的activity直到新的应用程序启动成功过渡动画结束为止。参考如下流程图PS从MTK官方网站提取我们在看看如果一个应用启动抓出来的trace是怎么样的呢仔细对比一下两者的差异下面用文字进行解读和说明流程一Launcher响应点击事件当某应用程序在对某个activity声明MAIN和LAUNCHER之后那么桌面应用程序Launcher就会把他们解析出来对应图标排列在桌面。这样用户就可以通过点击的方式启动Activity了。当用户在桌面应用程序launcher上面点击某个应用ICON那么launcher应用程序就得响应onClick事件如何响应呢参考如上泳图launcher调用startActivityForResult最终会走到AMS中主要逻辑实现还得是调用startActivityUnchecked方法去启动目标activity。PS这属于阶段一上半段流程流程二WMS启动过渡动画如上流程图在Launcher向AMS发起startActivityForResult之后就得通知WMS调用StartingWindowEnterAnimation方法启动窗口Starting Window俗称“白屏”或“预览屏”进入屏幕的动画阶段背景当用户点击 App 图标后系统需要时间去 Zygote 进程 fork 出一个新的进程并加载类、初始化 Application。这个过程通常需要几百毫秒甚至更久。目的为了不让用户觉得“点击没反应”或者看到黑屏WMSWindow Manager Service会立即根据 App 的主题Theme创建一个临时的、轻量级的窗口。这个窗口通常只包含状态栏、导航栏和 App 的 Logo 或背景色。动作圈红的部分表示 WMS 正在将这个临时窗口以动画的形式通常是淡入或缩放显示在屏幕上。这就是你在点击图标后App 界面出来之前看到的那个瞬间画面。当流程走到红框这一步时WMS 已经完成了“准备”工作并且正在屏幕上播放启动窗口的进入动画。这是 Step 1响应时间用户体验的关键组成部分——让用户感觉到系统已经迅速响应了点击操作。2、冷启动3、热启动