android冷启动白屏问题

女神.jpg

今天把玩公司App发现了一个有趣的现象。启动app白屏。之前没太留意过;在参照大厂App解决白屏的方案后。简单汇总一下。

前言

冷启动:App第一次启动的时候会加载一个Application进程,首先会创建和初始化Appliation类,然后在加载Activity。
热启动:利用后台已经拥有的进程,从而避免了Application的加载。直接去加载Activity。

解决白屏的方案大致有以下四种

  • 加入动画
  • 使用占位图
  • 使用图片
  • 使用windowDisablePreview属性

这里我就描述一下使用占位图和windowDisablePreview属性

windowDisablePreview属性

<style name="SplashTheme" parent="AppTheme">
        <item name="android:windowDisablePreview">true</item>
 </style>

在AndroidManifest中設置主Activity的theme值,在主Activity中还原。

@Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        setTheme(R.style.AppTheme);
        getWindow().setBackgroundDrawableResource(R.drawable.main_splash_bg);
        super.onCreate(savedInstanceState);
    }

运行后发现启动App延迟几秒后跳转到主Activity(有点类似掌上英雄联盟,会让用户误以为是自己手机的问题)。

使用占位图

  <style name="SplashTheme" parent="AppTheme">
        <item name="android:windowBackground">@drawable/shape_launch</item>
        <item name="android:windowFullscreen">true</item>
    </style>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
    android:opacity="opaque">

    <item android:drawable="@android:color/white"/>
    <item>
        <bitmap
            android:src="@mipmap/main_splash_bg"
            android:gravity="fill" />
    </item>

</layer-list>

使用windowBackground属性来完成其他操作同windowDisablePreview属性的设置。运行后发现明显白屏问题得到有效解决。

参考文献

gitHub地址
google论坛

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。