美文网首页
Android-启动优化

Android-启动优化

作者: 有腹肌的豌豆Z | 来源:发表于2020-08-29 08:57 被阅读0次

    一.App的启动以及Application启动过程分析

    • 从点击桌面Icon到我们第一个见面展示出来分为两个部分
      1.系统去创建进程以及Application
      2.Application到Acitivty
    • 第一部分是系统黑盒子模块,我们没有办法去通过代码优化,但是第二部分我们可以去通过代码进行优化。
    冷启动
    • App 没有启动过或 App 进程被杀,系统中不存在该 App 进程,此时启动即为冷启动。需要创建 App 进程,加载相关资源,启动 Main Thread,初始化首屏 Activity 等。在这个过程中,屏幕会显示一个空白的窗口(颜色基于主题),直至首屏 Activity 完全启动。
    热启动
    • 热启动意味着 App 进程只是处于后台,系统只是将其从后台带到前台展示给用户。类同与冷启动,在这个过程中,屏幕会显示一个空白的窗口(颜色基于主题),直至 activity 渲染完毕。
    温启动

    介于冷启动和热启动之间,一般来说在以下两种情况下发生:

    • 用户返回退出了 App,然后又启动。进程可能还在运行,但是 activity 需要重建。
    • 用户退出 App 后,系统可能由于内存原因将 App 杀死,进程和 activity 都需要重启,但是可以在 onCreate 中将被动杀死锁保存的状态(saved instance state)恢复。

    二.黑白屏原因

    • 当 App 的 theme 没有任何继承,这时候 App 的启动时候为黑屏屏。
     <style name="AppTheme">
     </style>
    
    • 当 App 的 theme 继承于 Theme.AppCompat.Light,这时候 App 的启动时候为白屏。
     <style name="AppTheme" parent="Theme.AppCompat.Light">
     </style>
    

    三.解决方案

    • 由上面可以知道,黑白屏出现的原因是在 App 未完全启动的时候,出现了一个背景界面,来提示用户 App 正在启动中。
      所以我们可以直接替换背景 android:windowBackground 为图片。可以使用广告进行宣传,这是目前常用的方案。
    <!-- 为 Theme 设置背景图 -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="android:windowBackground">@drawable/bg</item>
    </style>
    
    • 设置 Theme 背景为透明的。这样虽然可以避免出现黑白屏的问题,但是这在一些低端手机上,还是会闪烁一下。而且有时候由于背景设置为透明的,会影响到 Activity 间的切换动画。
    <!-- Theme 设置背景为透明的 -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="android:windowIsTranslucent">true</item>
    </style>
    
    • 直接把 Theme 的背景去掉,这样就不会出现黑白屏,也不会有设置 Theme 背景为透明的一些问题。
    <!-- Theme 去掉背景 -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="android:windowDisablePreview">true</item>
    </style>
    
    • 注:不论是把 Theme 背景设置为透明的还是直接把背景去掉,这样又会回到问题的最起点,点击 App 图标进行启动,在 App 未完全启动的时候,用户不能确定 App 是否已经启动。所以不太推荐这样处理。

    四.解决方案小优化

    • 在使用为 Theme 设置背景图这个方案的时候,如果直接把这个设置添加 App 的 Theme 中,那么所有的 Acticity 都有默认使用这个背景,不太符合逻辑。所以一般是对 Acticity 进行设置。
        <!-- Base application theme. -->    
        <style name="AppTheme.Launcher">
            <item name="android:windowBackground">@drawable/bg</item>
        </style>
    

    五.启动时间

    • 在 App 启动的时候,我们可以把一些耗时的操作放在子线程中进行操作。特别是初始化一些第三方库文件,单这些操作没有创建 handler、没有操作 UI、对异步要求不高的时候,就可以把他放在子线程中进行操作。还有一些单例模式,有些单例模式初始化也比较复杂,耗时,可以采用懒加载方法进行加载。
    • AppLauncher是一个轻量的Android App的任务启动器。
      它是一个优秀的异步初始化解决方案,用来方便、快速的帮助APP处理异步初始化来达到应用启动的最佳性能。
    • https://github.com/Ryan-Shz/AppLauncher

    相关文章

      网友评论

          本文标题:Android-启动优化

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