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

我有一个安卓应用程序,它显示2秒钟的白色屏幕启动。我的其他应用程序没有这个功能,但这个有。我还实现了一个启动画面,希望它能够解决这个问题。我应该增加我的闪屏睡眠时间吗? 谢谢。

120811 次浏览

你应该读读 Cyril Mottier 的这篇文章: Android 应用程序的发布让人眼前一亮

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

另请参阅谷歌关于 表现贴士的文档。

使用 Trace ViewHierarchy Viewer查看显示视图的时间: Android 性能优化/安卓性能调优

Use AsyncTask to display some views.

Just mention the transparent theme to the starting activity in the 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----
}

在 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">

把它放在一个自定义样式,它解决了所有的问题。使用粗糙的半透明修复将使您的任务栏和导航栏半透明,并使启动画面或主屏幕看起来像意大利面条。

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

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

<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>

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

希望能有帮助!

这是我的 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>

As you can see, I have the default colors and then I added the android:windowIsTranslucent and set it to true.

据我所知,作为一个 Android 开发人员,这是唯一需要设置的,以便隐藏应用程序开始时的白色屏幕。

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

    <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>

User543回答是完美的

<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>

But:

您的 发射活动必须扩展 活动,而不是 AppCompatActivity,因为它是默认的!

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

android:windowBackground=""

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

您应该禁用即时运行安卓工作室设置。

File>Settings>Build,Execution, Deployment>Instant Run unCheck all options shown there.

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

下面是建议如何设计 Splash 屏幕的链接。为了避免白色/黑色背景,我们需要定义一个带醒目背景的主题,并在清单文件中将该主题设置为醒目。

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

Res/draable 文件夹中的 splash _ backound.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>

Add below styles

<!-- 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>

在清单集主题中,如下所示

<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>

在我的一个项目中,我也遇到了同样的问题。我通过在提供给启动画面的主题中添加一些以下参数来解决这个问题。

<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowIsTranslucent">true</item>

You can find the reason and resolution in 这篇博文 written by me. Hope it helps.

尝试以下代码:

<!-- 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 设备。

它的解决方案很简单!

这个问题有 三个的基本原因

  1. You are doing 繁重/长时间运行/复杂任务 in onCreateVeiw Function.
  2. If your are using Thread. Then 线程睡眠时间 may be very large.
  3. 如果您正在使用任何 Third Party library。这是 初始化在应用程序 start up时间它可能会导致这个问题。

解决方案:

解决方案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.

In my Case i am using Sugar ORM which leads this problem.

分享改善。

白色背景是由于 Android 启动时应用程序加载到内存上,这可以避免,如果你只是添加这2行代码下 SplashTheme。

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

这解决了问题:

编辑 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>

And don't forget to make the modifications in the AndroidManifest.xml file. (主题名称)

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

我遇到了类似的问题,为了克服它,我用样式实现了下面的代码,即 res-> value-> style-> resource 标记

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

这是整个代码:

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