7

我正在开发一个安卓应用程序。就我而言,当应用程序启动时,它会显示一个临时屏幕,而 AsyncTask 在后台获取数据。此临时屏幕仅包含背景图像 (20 KB)。但是在这种背景下需要一段时间才能加载。因此,当我启动我的应用程序时,我只看到一个白屏,过了一会儿它显示了背景图像。关于如何摆脱这个问题并从头开始显示背景图像的任何想法这是开始屏幕的 xml 文件

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/start"
    android:orientation="vertical" >

</LinearLayout>

谢谢

4

2 回答 2

3

我有同样的问题。这个了不起的人有解释

TL;DR(只有在链接出错的情况下,我才会去阅读它):“预览窗口的目的是为用户提供应用程序启动的即时反馈,但它也让您的应用程序有时间进行自我初始化。当您的应用程序已准备好运行,系统会移除该窗口并显示您的应用程序的窗口和视图。” 您可以在主题中进行设置。至少,我的设置:

/res/values/styles.xml 中的主题:

<resources>

    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <item name="android:windowBackground">@drawable/app_bg</item>
    </style>
    <!-- Base theme for any other activity other than your starting one. -->
    <!-- If only one activity, just set the splash bg as its bg -->
    <style name="MyTheme.MainActivity" parent="@style/AppTheme">
        <item name="android:windowBackground">@drawable/app_splash_bg</item>
    </style>

</resources>

AndroidManifest.xml:

...
<activity
    android:name=".MainActivity"
    android:theme="@style/MyTheme.MainActivity"
    ...
    <!-- Set the MainActivity theme, can be skipped if you only have -->
    <!-- one activity and did not setup anything other than your base theme -->

MainActivity.java:

@Override
protected void onResume() {
    super.onResume();
    MainActivity.this.getWindow().setBackgroundDrawableResource(R.drawable.app_bg);
}

基本上,你为你的开始活动设置了一个带有启动背景的主题。然后,您在onResume所述启动活动期间将背景设置为正常背景。

此外,您可以在启动活动主题中注释掉windowBackground声明以在启动时查看原始(我假设)“丑陋的白色”屏幕。

于 2016-02-22T16:15:23.087 回答
0

在您的临时屏幕中,首先您应该执行 setContentView(),然后调用 AsyncTask(带有进度条,在 onPostExecute() 上被关闭)。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // Now start the AsyncTask.

}

另外,请注意,当您从一项活动过渡到另一项活动时,会有一些延迟;这是你无法消除的。我会建议你只进行一次活动。

于 2013-01-28T23:06:58.047 回答