欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android冷启动-实现APP秒开

程序员文章站 2022-05-29 22:20:16
...

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

如下图所示:

Android冷启动-实现APP秒开

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

 

什么是冷启动?

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

 

冷启动的缺点是什么?

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

 

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

APP 的启动流程:

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

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

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

 

优化白屏或冷启动的方案

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

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

 

方法一

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

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

Android冷启动-实现APP秒开     Android冷启动-实现APP秒开    Android冷启动-实现APP秒开

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

 

下面我也跟它们做的一样,纯色背景 + 图标启动 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:aaa@qq.com
 * 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>

 

运行起来,如下图所示:

Android冷启动-实现APP秒开

 

可以看到,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>

 

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

Android冷启动-实现APP秒开

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

 

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

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

 

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

 

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

啥是热启动?

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

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

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

 

结束。