Android冷启动-实现APP秒开

我们第一次打开 APP 的时候,如果没有做过处理,会经历一段白屏的时间,然后再开始看到我们的主页面;

如下图所示:

白屏的时间根据手机硬件配置来决定,一般在 500 - 2000 毫秒之间。

什么是冷启动?

冷启动就是,当 APP 进程被杀死,第一次打开该 APP 启动,它的启动过程就是冷启动。

冷启动的缺点是什么?

在没有做任何处理的情况下,当我们打开 APP ,屏幕出现白屏\黑屏;这便是冷启动的缺点。

产生白屏的原因或冷启动的原因是什么?

APP 的启动流程:

点击图标 ==> 启动应用 ==> 创建窗口(白屏或黑屏) ==> 创建进程 ==>

初始化 Application ==>启动线程 ==> 创建 activity ==> 创建布局 ==> 页面显示;

这样就可以发现,APP 的启动是需要时间的,也是无法避免的。

优化白屏或冷启动的方案

通过 Android 提供的 android:windowBackground 方法。优化的方法目前有且只有这一个。

我们可以通过 android:windowBackground 延伸出多种方案。

方法一

首先提供一个国外最常用方法,使用纯色背景图和图标。

如果你玩过 Twitter、YouTube 或 Reddit 国外软件,就可以发现,它们的启动图如下面所示:

         

非常的单调,但是直接解决启动白屏的问题。

下面我也跟它们做的一样,纯色背景 + 图标启动 APP。

首先在 drawable 文件夹下面新建名称为 bg_start 的 xml 文件,里面的代码如下面所示:

<?xml version="1.0" encoding="utf-8"?>

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item android:drawable="@color/colorPrimary" />

    <item>
        <bitmap
            android:gravity="center"
            android:src="@drawable/ic_launcher" />
    </item>

</layer-list>

创建 SplashActivity ,设置为启动的 activity ,由它跳转到 MainActivity,里面的代码为:

/**
 * wuqingsen on 2019-11-20
 * Mailbox:[email protected]
 * annotation:
 */
public class SplashActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        Intent intent = new Intent(SplashActivity.this, MainActivity.class);
        startActivity(intent);
    }
}

在 styles 中,应用 bg_start ,代码如下:

    <!--app秒开-->
    <style name="SplashThemeLayer" parent="AppTheme">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@drawable/bg_start</item>
    </style>

最后在 AndroidManifest.xml 文件中添加下面的代码即可:

        <activity android:name=".SplashActivity"
            android:theme="@style/SplashThemeLayer">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

运行起来,如下图所示:

可以看到,APP 没有了白屏,运行也很流畅。

方法二

上面的方法虽然好,但是在国内没有多少 APP 这么使用,启动图总是广告。而你只能屈服,并且来优化这个问题。

下面给出方法二,添加图片,这个方法在国内的 APP 使用还是有的,如微博、有道、微信、百度云都是用的这个方法;

添加图片的方法非常的简单,只需要修改 styles 的代码,如下图所示:

    <!--app秒开-->
    <style name="SplashThemeLayer" parent="AppTheme">
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:windowBackground">@drawable/start</item>
        
        <item name="android:windowTranslucentStatus" tools:ignore="NewApi">true</item>
    </style>

添加完毕,运行效果如下:

运行流畅,没有白屏的情况。

如果还是无法满足你的需求,就从下面去找属于你的方法:

https://github.com/saulmm/onboarding-examples-android

源码比较简单,这里就不再给出了。

说完冷启动,那么就一定有热启动了;

啥是热启动?

热启动就是进程存在的情况下,再次打开 APP。

如:按下 home 键,再次回到 APP ;或者进入其它 APP ,再回来;等等

由于 Application 还在,所以无需走 APP 的启动流程,所以也不再多说了。

结束。

发布了322 篇原创文章 · 获赞 450 · 访问量 32万+

猜你喜欢

转载自blog.csdn.net/wuqingsen1/article/details/103167168