如何在应用程序上修复白屏启动?

时间:2013-12-12 14:52:30

标签: android splash-screen app-startup

我有一个Android应用程序,在启动时显示白色屏幕2秒。我的其他应用程序不这样做,但这个应用程序。我还实现了一个启动画面,希望能解决这个问题。我应该增加闪屏的睡眠时间吗? 感谢。

18 个答案:

答案 0 :(得分:150)

将其置于自定义样式中,它可以解决所有问题。使用hacky半透明修复将使您的任务栏和导航栏半透明,使闪屏或主屏幕看起来像意大利面。

<item name="android:windowDisablePreview">true</item>

答案 1 :(得分:97)

只需在AndroidManifest.xml中提及启动活动的透明主题即可 文件。

像:

<activity
        android:name="first Activity Name"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
 <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
 </activity>

并使用Activity类扩展该屏幕以代替AppCompatActivity

喜欢:

public class SplashScreenActivity extends Activity{

  ----YOUR CODE GOES HERE----
}

答案 2 :(得分:65)

enter image description here

就像你管...最初他们显示图标屏幕而不是白色屏幕。 2秒后显示主屏幕。

首先在res / drawable中创建一个XML drawable。

<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">

    <item
        android:drawable="@color/gray"/>

    <item>
        <bitmap
            android:gravity="center"
            android:src="@mipmap/ic_launcher"/>
    </item>

</layer-list>

接下来,您将把它设置为主题中的启动活动的背景。导航到styles.xml文件并为启动活动添加新主题

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
    </style>

    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/background_splash</item>
    </style>

</resources>

在新的SplashTheme中,将窗口背景属性设置为XML drawable。在AndroidManifest.xml中将其配置为splash活动的主题:

<activity
    android:name=".SplashActivity"
    android:theme="@style/SplashTheme">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

此链接提供您想要的内容。一步一步的程序。 https://www.bignerdranch.com/blog/splash-screens-the-right-way/

<强>更新

layer-list可以更简单(与<bitmap>标签不同,它也接受居中徽标的矢量绘图):

<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- Background color -->
    <item android:drawable="@color/gray"/>

    <!-- Logo at the center of the screen -->
    <item
        android:drawable="@mipmap/ic_launcher"
        android:gravity="center"/>
</layer-list>

答案 3 :(得分:64)

在style.xml中创建一个样式,如下所示:

<style name="Theme.Transparent" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

并将其与您在AndroidManifest中的活动一起用作:

<activity android:name=".ActivitySplash" android:theme="@style/Theme.Transparent">

答案 4 :(得分:7)

你应该阅读Cyril Mottier的这篇精彩文章:Android App launching made gorgeous

您需要在style.xml中自定义Theme,并避免在onCreate中自定义为ActionBar.setIcon / setTitle / etc。

另请参阅Google的Performance Tips文档。

使用Trace ViewHierarchy Viewer查看展示观看次数的时间:Android Performance Optimization / Performance Tuning On Android

使用AsyncTask显示一些观看次数。

答案 5 :(得分:5)

这是我在应用示例应用中的AppTheme:

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowIsTranslucent">true</item>
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

如您所见,我有默认颜色,然后我添加了android:windowIsTranslucent并将其设置为true

据我所知,作为Android开发人员,这是您需要设置的唯一内容,以便在应用程序的开头隐藏白屏。

答案 6 :(得分:3)

这两个属性都可以使用其中任何一个。

    <style name="AppBaseThemeDark" parent="@style/Theme.AppCompat">
            <!--your other properties -->
            <!--<item name="android:windowDisablePreview">true</item>-->
            <item name="android:windowBackground">@null</item>
            <!--your other properties -->
    </style>

答案 7 :(得分:3)

user543 answer是完美的

requests.Session()

可是:

启动活动必须在默认情况下使用活动,而不是 AppCompatActivity

答案 8 :(得分:3)

白色背景来自Apptheme.You可以显示一些有用的东西,如你的应用程序徽标而不是白色屏幕。可以使用自定义主题完成。在你的应用程序主题只需添加

android:windowBackground=""

属性。 属性值可以是图像或分层列表或任何颜色。

答案 9 :(得分:2)

我在我的一个项目中也遇到了同样的问题。我通过在提供给初始屏幕的主题中添加以下一些参数来解决该问题。

sudo gitlab-ctl reconfigure

您可以在我写的this blog post中找到原因和解决方法。希望对您有所帮助。

答案 10 :(得分:1)

可以通过将清单中的主题设置为

来修复
<activity
        android:name=".MySplashActivityName"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" >
 <intent-filter>
     <action android:name="android.intent.action.MAIN" />
     <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

之后如果你得到了 java.lang.IllegalStateException:您需要在此活动中使用Theme.AppCompat主题(或后代)。
那么您可能需要在MySplashActivity中扩展活动而不是 AppCompatActivity

希望它有所帮助!

答案 11 :(得分:1)

白色背景是由于Android在应用程序加载到内存时启动而引起的,如果您仅在SplashTheme下添加这两行代码,就可以避免这种情况。

<item name="android:windowDisablePreview">true</item>
<item name="android:windowIsTranslucent">true</item>

答案 12 :(得分:1)

I encountered a similar problem and to overcome it, I implemented the code below in styles, i.e res->values->styles->resource tag 
<item name="android:windowDisablePreview">true</item>

Here is the whole code:

<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <item name="android:windowDisablePreview">true</item>
</style>

答案 13 :(得分:0)

你应该禁用Instant Run android studio设置。

文件&gt;设置&gt;构建,执行,部署&gt;即时运行取消选中此处显示的所有选项。

注意:白屏由于即时运行导致的问题仅适用于调试版本,此问题不会出现在版本构建中。

答案 14 :(得分:0)

以下是建议如何设计启动画面的链接。为了避免白/黑背景,我们需要定义一个带有初始背景的主题,并将该主题设置为在清单文件中显示。

https://android.jlelse.eu/right-way-to-create-splash-screen-on-android-e7f1709ba154

res / drawable文件夹中的

splash_background.xml

<?xml version=”1.0" encoding=”utf-8"?>
 <layer-list xmlns:android=”http://schemas.android.com/apk/res/android">

 <item android:drawable=”@color/colorPrimary” />

 <item>
 <bitmap
 android:gravity=”center”
 android:src=”@mipmap/ic_launcher” />
 </item>

</layer-list>

添加以下样式

<!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
    </style>
    <!-- Splash Screen theme. -->
    <style name="SplashTheme" parent="Theme.AppCompat.NoActionBar">
        <item name="android:windowBackground">@drawable/splash_background</item>
    </style>

在Manifest中设置主题如下所示

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

答案 15 :(得分:0)

尝试以下代码:

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowActionBar">false</item>
    <item name="android:windowFullscreen">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:windowIsTranslucent">true</item>
</style>

此代码对我有效,并且可在所有Android设备上使用。

答案 16 :(得分:0)

其解决方案非常简单!

此问题有三个基本原因

  1. 您正在onCreateVeiw函数中执行繁重/长时间运行/复杂的任务
  2. 如果您正在使用线程。这样,线程休眠时间可能会很大。
  3. 如果您正在使用任何第三方库。在应用程序启动初始化可能会导致此问题。

解决方案:

解决方案1:

  Remove the Heavy Task from onCreateView() function and place it some where appropriate place.

解决方案2:

  Reduce the Thread Sleep time.

解决方案3:

  Remove the Third party library at app initialize at implement them with some good strategy.
  

就我而言,我正在使用Sugar ORM,这会导致此问题。

分享以改善。

答案 17 :(得分:0)

这解决了问题:

编辑您的styles.xml文件:


粘贴以下代码:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:windowFullscreen">true</item>
        <item name="android:windowContentOverlay">@null</item>
        <item name="android:windowIsTranslucent">true</item>
    </style>

</resources>

请不要忘记在 AndroidManifest.xml 文件中进行修改。 (主题名称

请注意该文件中活动的声明顺序。