zoukankan      html  css  js  c++  java
  • Android 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 显示。

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

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

    1     <activity
    2         android:name=".ui.WelcomeActivity"
    3         android:theme="@style/SplashTheme">
    4         <intent-filter>
    5             <action android:name="android.intent.action.MAIN" />
    6             <category android:name="android.intent.category.LAUNCHER" />
    7         </intent-filter>
    8     </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     <?xml version="1.0" encoding="utf-8"?>
     2     <layer-list xmlns:android="http://schemas.android.com/apk/res/android">
     3         <!-- 背景颜色 -->
     4         <item android:drawable="@color/green" />
     5         <item>
     6             <!-- 图片 -->
     7             <bitmap
     8                 android:gravity="center"
     9                 android:src="@drawable/icon_welcome" />
    10         </item>
    11     </layer-list>

    转载自:http://sendtion.cn/archives/506




  • 相关阅读:
    Oracle SQL语句收集
    SqlParameter In 查询
    SQL 性能优化
    Entity Framework
    【XLL API 函数】 xlfSetName
    【XLL API 函数】xlfUnregister (Form 2)
    【XLL API 函数】xlfUnregister (Form 1)
    【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句
    【Excel 4.0 函数】REGISTER
    【Bochs 官方手册翻译】 第一章 Bochs介绍
  • 原文地址:https://www.cnblogs.com/yizhiwa/p/9302734.html
Copyright © 2011-2022 走看看