美文网首页
你真的懂Android App的启动优化吗?

你真的懂Android App的启动优化吗?

作者: Natchi | 来源:发表于2019-07-26 17:32 被阅读0次

    知其然知其所以然

    凡是不知道的事情,查文档,肯定能查出个究竟
    了解启动时,系统和应用程序发生了什么,以及他们在这些状态下做了什么

    App 启动的三种状态

    每一种状态都会影响你的App对用户可见的时间

    冷启动(冷启动是App从零状态开始的状态,相对于其他的状态,我们应该更注重优化这状态下的启动)

    什么是冷启动?

    在系统关闭App前提下,设备首次启动

    冷启动时,系统做了些什么?
    1. 加载和启动应用程序
    2. 在启动后,显示应用的空白启动窗口
    3. 创建app process
    4. app process 就开始做接下来的部分(见下图)
    image

    热启动(热启动和温启动,是系统把正在运行的App从后台带到前台的状态)

    重新启动App,但是这个时候App的Activitys都还存在内存中

    温启动

    我根据官网的解释,重新进入App,重新调用onCreate()方法就是温启动,然后为什么会调用onCreate,可以认为App数据在内存中被清除了

    这里可以先来分析下,根据官网提供的图,注意看,在这个单打独斗的日子,我们改不了系统的源码,我们只能做到我们开发中注意的点,<u>两个onCreate回调方法</u>,我们平时肯定是会用到的,不要在这做太多的耗时,影响DislayTime**

    App启动流程分析

    我在绍文大神的《Android开发高手课》专栏中看到,其实我们真正的业务不止这么简单,我们可能有闪屏页,广告页,然后到主页,这才是单单的页面展示,里面加载广告,热修复框架,插件话框架,等等

    邵文大神课里的图

    查看启动时间

    那么你可以通过logcat中Displayed,来查看你应用到某个页面的时间

    2019-07-26 14:36:40.016 1151-1188/? I/ActivityManager: Displayed com.txt.demo/DemoActivity: +847ms (total +2s405ms)
    

    或者通过adb的命令行来查看

    adb shell am start -S -W com.txt.demo/DemoActivity
    Stopping: com.txt.demo
    Starting: Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=com.txt.demo/DemoActivity }
    Status: ok
    Activity: com.txt.demo/DemoActivity
    ThisTime: 405
    TotalTime: 908
    WaitTime: 939
    Complete
    

    你还可以通过调用reportFullyDrawn()这是Activity的方法,可以来查看从启动到该页面的时间,根据你项目的需求,比如你有一系列懒加载,导致用户不能点击,那么你可以在懒加载完成之后,调用这个函数,告诉系统,然后可以查看。

    image
    2019-07-26 14:52:23.990 1151-1485/? I/ActivityManager: Fully drawn com.txt.homecredit/.ui.MainActivity: +1s380ms
    

    当然好的工具也很重要,AS的CPU分析器工具真的至少要会一种,因为很多性能分析,找到思路或者是想找到问题,工具能帮助你如虎添翼,有空我分享下

    可能出现的启动问题

    1. 点击图标很久都不响应,或出现白屏(黑屏)
    我们应用要是没有处理的话,都会出现这个问题,这个问题的解决,网上已经有很多方案,有方案说禁用预览窗口,但是官网说建议还是用设置theme的背景图片方法

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <item>
            <bitmap android:src="@mipmap/app_bg"
                android:gravity="fill"/>
        </item>
    </layer-list>
    

    2. 首页显示的太慢
    现在业务多,启动流程越来越复杂,闪屏广告、热修复框架、插件话框架等等都需要在启动阶段完成,所以会导致部分性能不好的机型出现显示很慢的情况
    3. 首页显示后无法操作
    这个操作是基于首页显示的太慢做的优化,更多的工作在放在异步来处理,但是导致的弊端,页面展示后,有些数据没有出来,导致白屏,或者用户就无法操作页面。

    启动优化

    • Application优化
      在上面冷启动的图,能看出在onCreate()尽量不做耗时工作
    • 闪屏优化
      闪屏优化,就是把预览窗口实现成闪屏的效果,可以用我上面说的这个方法来实现
    • 业务优化
      在启动过程中,我们要知道那些模块一定是要用到的,那些是可以在后面加载的
    • 细节优化
      1. 比如在广告页中,需要展示3秒的图片,在获取图片的时候,如果超过了三秒,就下次再展示(此时可以展示之前的图片或者不展示,展示logo之类),如果在3秒内,就展示这次的图片。
      2. 在上面说到的一定要加载的模块,可以再优化下,是不是可以通过算法,或者其他的方式实现,可优的点(这部分感觉要点能力,哈哈,我跟着绍文大神在学习中)
      3. 线程、GC等等比较让人头大的问题都可以优化

    参考在开发的道路上,永远也不会被淘汰的是性能问题,感谢邵文大神

    有问题找Google开发文档,准没错

    启动优化,需要知道系统从启动到展示页面的逻辑,需要清楚了解我们的应用,业务在启动过程中做了什么,我们大部分能做的优化,就是在我们业务上面,通过更好的实现来优化。

    相关文章

      网友评论

          本文标题:你真的懂Android App的启动优化吗?

          本文链接:https://www.haomeiwen.com/subject/dmbdrctx.html