敞开生长之旅!这是我参加「日新方案 2 月更文应战」的第 22 天,点击查看活动详情

相信咱们一定遇到过某些App在手机桌面翻开时会出现短暂或许几秒钟的白屏情况吧,没错那是使用程序发动后系统默许的布景色,此刻使用的第一个Activity还未被加载出来,所以不管怎么设置第一个Activity的布景色都毫无作用。但细心的朋友发现,有些App发动时白屏的时刻又很短简直能够忽略不计呢?今天就共享一篇关于App冷发动处理白屏时刻过长的问题。

首要先聊一聊冷发动和热发动:

  • 冷发动

杀掉App,此刻的App进程不存在于后台,发动时从Logo页面开端。

  • 热发动

App处于后台,进程未被杀死,从头进入前台时页面坚持上一次页面,不会从头发动。

所以,咱们此次所讲的属于冷发动过程,当使用程序代码量小、事务逻辑少、体积小时,App发动还是比较快,白屏时刻能够忽略不计。一旦初始化工具过多,主页事务逻辑过多时发动速度会严重变慢,此刻的白屏时刻会越来越长,给人一种极差的体会。咱们需求做的便是在白屏时刻尽可能快速的展现Logo等图标,让它成为一个过渡,待使用程序准备好后跳转到相应页面以进步用户体会。

首要,需求装备一个SplashActivity(使用展现的第一个Activity)的主题

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- 将splash图片设置在这,这样这张图片替代白屏 -->
    <item name="android:windowBackground">@drawable/logo_drawable</item>
    <item name="android:windowAnimationStyle">@style/notAnimation</item>
    <!--将顶部状态栏设置为通明,并将界面内容布局上鸿沟上提至状态栏顶部-->
    <item name="android:windowTranslucentStatus">true</item>
    <!--假如有底部虚拟导航栏,则将底部虚拟导航栏设置为通明,并将界面内容布局下鸿沟下沉至虚拟导航栏底部-->
    <item name="android:windowTranslucentNavigation">true</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowActionBar">true</item>
</style>

其中windowBackground是咱们本次重点装备,windowAnimationStyle是撤销页面的一些动画作用,一般主页咱们让它无动画,其他设置依据自己情况设置即可。

让咱们来看看logo_drawable

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="#ffffffff"/>
    </item>
    <item
        android:top="208dp"
        android:bottom="453dp">
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_logo" />
    </item>
</layer-list>

白色布景上叠加一个bitmap,这儿需求留意的是bitmap外层的item标签一定要依据设计稿装备好上下边距,不然运转App后的作用会被铺满屏幕。

然后咱们将上面的主题装备到activity中,此刻SplashActivity的布局文件中能够什么都不写,由于该主题就相当于布景,假如此处编写页面可能会和布景logo重合,仅需求编写一些逻辑和跳转处理。

<activity
    android:name=".ui.splash.SplashActivity"
    android:configChanges="orientation|screenSize"
    android:exported="true"
    android:launchMode="singleTop"
    android:screenOrientation="portrait"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

至此,再次运转翻开App发现,简直点开便是咱们装备的logo,完美处理白屏问题。

留意:

假如项目使用了UI适配的三方库,例如androidAutoSize,一定记住依据文档处理抛弃发动页适配,不然运转出来的作用也是不如意。

总结

白屏处理其实便是通过主题装备一个布景,在加载页面时会首要显示该布景,无需渲染页面,所以App翻开就能很快展现Logo,一般推迟一两秒再跳转主页到达一个良好的用户体会。

敞开生长之旅!这是我参加「日新方案 2 月更文应战」的第 22 天,点击查看活动详情