• 欢迎访问风的记忆博客网站,如有疑问请加作者QQ或者微信联系。作者QQ:524100248,微信号:sendtion。

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

安卓教程 sendtion 8年前 (2016-11-28) 7154次浏览 已收录 3个评论 扫描二维码
文章目录[隐藏]

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 显示。


1
2
3
4
5
6
7
8
<!-- 防止欢迎页白屏或者黑屏,设置图片 -->
<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。


1
2
3
4
5
6
7
8
<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 属性为颜色代码:


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

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


1
2
3
4
5
6
7
8
9
10
11
<?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>

1
2
3
4
5
6
<!-- 防止欢迎页白屏或者黑屏,设置图片 -->
<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://www.cnblogs.com/angeldevil/p/3801209.html

http://blog.csdn.net/yanzhenjie1003/article/details/52201896

http://blog.csdn.net/wangjiang_qianmo/article/details/51736418


风的记忆 , 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Android APP 启动时出现白屏或者黑屏怎么办?
喜欢 (5)
[sendtion@126.com]
分享 (0)
sendtion
关于作者:
一个不断奋斗追逐梦想的少年~
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
(3)个小伙伴在吐槽
  1. 其实个人感觉无所谓
    胡杨2016-12-05 16:48 回复 未知操作系统 | 360浏览器 536168827716353
    • ......
      莫心俗2017-02-07 09:01 回复 未知操作系统 | 未知浏览器