美文网首页AndroidAndoid架构Android
Android APP启动时出现白屏或者黑屏怎么办?

Android APP启动时出现白屏或者黑屏怎么办?

作者: sendtion | 来源:发表于2016-11-29 09:23 被阅读9270次

    很多时候,我们启动APP时会有短暂的白屏或者黑屏,大概1~2秒后,才会显示主界面或者显示启动页,这是为什么呢?本篇文章来介绍一下,并给出APP启动秒开的解决办法。

    1、为什么APP启动时会出现白屏或者黑屏?

    当打开一个Activity时,如果这个Activity所属的应用还没有在运行,系统会为这个Activity所属的应用创建一个进程,但进程的创建与初始化都需要时间,在这个动作完成之前系统要做什么呢?如果没有任何反应的话,如果程序初始化的时间很长,用户可能还以为没有点到相应的位置。但此时所启动的程序还没初始化完,既无法显示程序,又不能停在原处不做任何动作,怎么办?这就有了Starting Window的概念,也可以称之为Preview Window。

    Starting Window就是一个用于在应用程序进程创建并初始化成功前显示的临时窗口,拥有的Window Type是TYPE_APPLICATION_STARTING。在程序初始化完成前显示这个窗口,以告知用户系统已经知道了他要打开这个应用并做出了响应,当程序初始化完成后显示用户UI并移除这个窗口。

    显示白屏或者黑屏,是由你的启动Activity或者Application来决定的。如果你使用的是Light主题,那么就可能出现白屏;如果你使用的是Black主题,那么就可能出现黑屏。当你设置Light或者Black主题时,Starting Window显示的就是你启动Activity的android:windowBackground属性,所以才会出现白屏或者黑屏的情况。

    2、怎么解决启动白屏或者黑屏问题呢?

    在style.xml文件中为启动的Activity设置主题,设置android:windowBackground属性为启动Activity显示的闪屏图片,这样才有APP秒开的效果。设置android:windowFullscreen属性为true,使闪屏图片全屏显示。设置windowNoTitle属性为true,隐藏Activity的ActionBar显示。

    <!-- 防止欢迎页白屏或者黑屏,设置图片 -->
    <style name="SplashTheme" parent="AppBaseTheme"> 
        <item name="android:windowBackground">@drawable/img_welcome</item> 
        <item name="android:windowFullscreen">true</item> 
        <item name="windowNoTitle">true</item> 
        <!--<item name="android:windowIsTranslucent">false</item>--> 
        <!--<item name="android:windowDisablePreview">true</item>-->
    </style>
    

    然后,在清单文件AndroidManifest.xml中,为启动的Activity设置主题SplashTheme。

    <activity android:name=".ui.WelcomeActivity" 
        android:theme="@style/SplashTheme"> 
        <intent-filter> 
            <action android:name="android.intent.action.MAIN" /> 
            <category android:name="android.intent.category.LAUNCHER" /> 
        </intent-filter>
    </activity>
    

    此外,如果设置android:windowIsTranslucent属性,表明该窗口是半透明的,这样也不会出现白屏或者黑屏。但是,它和MainActivity的显示是同步,如果在MainActivity启动的时候,有过多复杂的操作,就会出现在手机中点击了应用程序的图标之后,但过两秒才会打开应用程序不好的卡顿体验效果。

    如果设置android:windowDisablePreview属性,禁用窗口的预览动画, 在MainActivity显示之前,系统永远不会使用窗口的主题来显示它的预览,这也保证了不会出现白屏或者黑屏。但是,与设置android:windowIsTranslucent属性一样,如果在MainActivity启动的时候,有过多复杂的操作,就会出现在手机中点击了应用程序的图标,但过两秒才会打开应用程序不好的卡顿体验效果。

    3、还有没有其他解决方案?

    以上方式可以实现APP秒开,但是我不想显示一张图片,那么你也可以显示纯颜色,或者纯颜色加小图标。

    Starting Window显示纯颜色,直接设置android:windowBackground属性为颜色代码:

    <item name="android:windowBackground">@color/colorAccent</item>
    

    Starting Window显示纯颜色加图标,需要在Drawable中定义一个splash.xml文件:

    <?xml version="1.0" encoding="utf-8"?>
    <layer-list xmlns:android="http://schemas.android.com/apk/res/android"> 
        <!-- 背景颜色 --> 
        <item android:drawable="@color/green" /> <item> 
        <!-- 图片 --> 
        <bitmap android:gravity="center" android:src="@drawable/icon_welcome" /> </item>
    </layer-list>
    
    <!-- 防止欢迎页白屏或者黑屏,设置图片 -->
    <style name="SplashTheme" parent="AppBaseTheme"> 
        <item name="android:windowBackground">@drawable/splash</item> 
        <item name="android:windowFullscreen">true</item> 
        <item name="windowNoTitle">true</item>
    </style>
    

    原文地址:http://sendtion.cn/archives/506
    如有疑问,欢迎指正!

    参考文章:
    http://www.cnblogs.com/angeldevil/p/3801209.html
    http://blog.csdn.net/yanzhenjie1003/article/details/52201896
    http://blog.csdn.net/wangjiang_qianmo/article/details/51736418

    相关文章

      网友评论

      • 61676b242e8b:在super.onCreate(savedInstanceState);前面加
        setTheme(R.style.AppTheme);//可将主题换回原来默认的就不会让后面的界面一直启动页的图片为背景了
      • HopeMan:遇到一个问题,三星s6,设置->显示,缩放屏幕,然后再打开app,会出现白屏,目前解决不了
        HopeMan:@sendtion 不是三星系统的问题,看了是7.0上新增的功能,不过国内手机把此功能都给阉割了,看不到。问题应该是我们的app在application中做了太多任务,测了下,onCreate()执行要1s左右(开发人员较多,初始化涉及较多组,暂时无法改动),但是正常启动app在此手机上是没有问题的。
        sendtion:@HopeMan 某不是三星系统的问题?
      • n多个:如果我这个有横竖屏切换的话,这个android:windowBackground的图片怎么设置吗?横屏和竖屏的图片都不同的。
        sendtion:@n多个 不至于在启动的时候切换吧
        sendtion:@n多个 App启动顶多也就几秒,你要启动的时候切换吗?干脆直接锁定竖屏好了
      • nice_demo:good job·
      • 你最珍贵only:谢谢 已经解决了
      • thiagooo0:谢谢博主~:pray:
      • 毹毹:设置图片后,一样的图会显示2张不太一样的,请问为啥?
        hgncxzy:@冰点k 将启动页面图片放在xh和xxxh里面试试,其中xh和xxxh里面的图片分辨率是不一样的,我之前随便放了一张图不行,替换UI给的标准图后,没有白屏了
        冰点k:你好,请问解决了吗,设置成fitXY显示好像还是不一样
        sendtion:如果启动页只有一张图片,完全可以把启动页去掉。至于显示不一样,可能背景的填充方式和你启动页的图片显示方式不同,你试试设置fitXY
      • e33ed3368e62:学习了

      本文标题:Android APP启动时出现白屏或者黑屏怎么办?

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