美文网首页
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-启动优化

    一.App的启动以及Application启动过程分析 从点击桌面Icon到我们第一个见面展示出来分为两个部分1....

  • Android-启动速度优化

    启动状态 应用有三种启动状态,每种状态都会影响应用向用户显示所需的时间:冷启动、温启动与热启动。在冷启动中,应用从...

  • App启动优化(三)启动优化方案

    系列文章 App启动优化(一)冷启动和热启动 App启动优化(二)启动时间测量 App启动优化(三)启动优化方案 ...

  • android启动优化

    感谢原作者涉及:应用启动流程启动优化(闪屏页优化、MultiDex 优化、WebView启动优化、启动耗时分析方法)

  • App优化,包括启动优化、界面卡顿优化,及监控方案

    启动优化 启动优化包括冷启动优化和热启动优化。 main之前 1.减少不必要的framework,因为动态链接比较...

  • Android-渲染性能优化overdraw

    原文链接 更多教程 Android-渲染性能优化overdraw 你将学到 1.overdraw简介2.overd...

  • 性能优化 - 启动时间

    应用的启动分为:冷启动,暖启动和热启动。其中冷启动是我们优化的重点,优化冷启动可能会同时优化暖启动和热启动。 冷启...

  • App白屏和启动优化的一些思路

    App启动优化 App启动优化原理与技术方案 启动优化 黑白屏问题 启动页面主题设置为图片 启动页面,不要再onC...

  • 冷启动优化

    App启动分为冷启动和热启动,我们说的启动优化一般是指冷启动优化。若要想优化,首先我们必须明确启动过程。 启动过程...

  • 【高级iOS】启动时间优化

    【高级iOS】启动时间优化 【高级iOS】启动时间优化

网友评论

      本文标题:Android-启动优化

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