美文网首页插件化随笔-生活工作点滴
Android启动页出现白屏、黑屏的解决方案

Android启动页出现白屏、黑屏的解决方案

作者: 程序员阿兵 | 来源:发表于2019-07-10 11:10 被阅读71次

项目使用的是组件化,需要在初始化时解析各组件对配置文件,然后分发配置文件初始化组件,这些繁杂操作得在application去初始化


public class AppContext extends MultiDexApplication {

    private ArrayList<ACComponentBase.ComponentEntity> components = new ArrayList<>();
    private static AppContext sAppContext;
    @Override
    public void onCreate() {
        super.onCreate();
        
        sAppContext = this;
        registerActivityLifecycleCallbacks(ActivityHelper.getInstance());
        //组件初始化
        initComponentsFromXml();
        invokeOncreate();
        invokeOnAllInitialized();
        
    }

    @Override
    public void onTerminate() {
        super.onTerminate();
        invokeOnTerminate();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        invokeOnConfigurationChanged(newConfig);
    }

    @Override
    public void onLowMemory() {
        super.onLowMemory();
        invokeOnLowMemory();
    }

    @Override
    public void onTrimMemory(int level) {
        super.onTrimMemory(level);
        invokeOnTrimMemory(level);
    }

    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base);
        invokeAttachBaseContext(base);
    }

还有一个根本历史原因:

当系统启动一个APP时,zygote进程会首先创建一个新的进程去运行这个APP,但是进程的创建是需要时间的,在创建完成之前,界面是呈现假死状态的,这就很尴尬了,因为用户会以为没有点到APP而再次点击,这极大的降低用户体验,Android需要及时做出反馈去避免这段迷之尴尬。于是系统根据你的manifest文件设置的主题颜色的不同来展示一个白屏或者黑屏。而这个黑(白)屏正式的称呼应该是Preview Window,即预览窗口。
好了,现在我们明白了,Preview Window其实是为了提高用户体验而有意设定的。因此,其实如果不是强迫症,它可能并不是一个问题。

目前app的设计思路,都会有一个启动页,来进行一些数据的初始化等一些比较耗时的操作,这就会造成启动页短暂的白屏或者黑屏(黑还是白取决于你的默认主题)。那么,如何解决这种问题的?今天介绍一种比较完美的解决方案:layer_list叠加层。

如果启动页是默认一张静态图,那么可以使用下面的方式:

  • 直接定义一个主题在启动的activity
<resources>
     <!-- 应用启动页(StartingWindow)的theme -->
    <style name="AppTheme.StartingWindowTheme" parent="AppTheme">
        <item name="android:windowBackground">@drawable/start_bg_2</item>
    </style>
</resources>
  • 定义自定义 layer_list叠加层
    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
        <!-- 整体的背景颜色 -->
        <item android:drawable="@color/white" /> <item>
        <!-- 中间的图片 -->
        <bitmap
            android:gravity="center"
            android:src="@drawable/icon_welcome"
            android:scaleType="center" />
    </item>
    </layer-list>
    

根据上面的layer_list 给启动的activity增加背景

    <style name="SplashAppTheme" parent="android:Theme">
        <item name="android:windowNoTitle">true</item>
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowBackground">@drawable/layer_splash</item>
    </style>
  • 给activity设置上面的主题就行;

相关文章

网友评论

    本文标题:Android启动页出现白屏、黑屏的解决方案

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