我正在开发一个Android应用程序。在我的例子中,当应用程序启动时,它会显示一个临时屏幕,而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>
由于
答案 0 :(得分:3)
我遇到了同样的问题。这个很棒的人有explanation。
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
声明,以便在启动时看到原始(我假设)“丑陋的白色”屏幕。
答案 1 :(得分:0)
在临时屏幕中,首先应该执行setContentView(),然后调用AsyncTask(使用进度条,在其上取消onPostExecute())。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Now start the AsyncTask.
}
另外,请注意,当您从一项活动转到另一项活动时,会有一些延迟;这是你无法消除的。我建议你只进行一次活动。