启动器活动setContentView延迟

时间:2015-02-04 14:24:18

标签: android android-activity activity-lifecycle

我使用启动画面创建了一个简单的应用程序,显示1秒钟。启动画面几乎是红色的。但我注意到,当我首先启动我的应用程序〜0.3秒时出现白屏,然后出现我的启动画面。是否可以删除此白屏或使其预定义为红色?我在带有android 5.0的nexus 4上测试它,我的Splash活动有很简单的实现,没有什么可以延迟onCreate():

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_launcher);
    waitTask = new WaitTask();
    waitTask.execute();
}

private class WaitTask extends AsyncTask<Void, Integer, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        try {
            TimeUnit.MILLISECONDS.sleep(SPLASH_DURATION);
        } catch (InterruptedException e) {
            // Do nothing
        }
        return null;
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        Intent intent = new Intent(LauncherActivity.this, MainActivity.class);
        startActivity(intent);
        finish();
    }

}

我注意到几乎所有的应用程序都显示第一个屏幕有一些延迟和这个白色屏幕,但在某些应用程序中这个屏幕又回来了。有没有办法控制它?

2 个答案:

答案 0 :(得分:1)

您可以定义活动的样式并在Manifest中设置它。这样,当活动运行时,它将使用其预定义的样式(在其中将背景或windowBackground设置为红色)并且在0.3秒内,窗口仍将是红色。

定义颜色:

<resources>
    <color name="background">#FF0000</color>
</resources>

然后定义样式:

<resources>
    <style name="MyLaunchActivityTheme" parent="@android:style/Theme.Light"> 
        <item name="android:windowBackground">@color/background</item>
     </style>
</resources>

然后在清单中设置活动的样式:

<activity
    android:name=".MyActivity"
    android:theme="@style/MyLaunchActivityTheme"/>

答案 1 :(得分:1)

ans Sam给出的是完美的,但要扩展它 - 让你想让你的自定义闪屏图像一直可见,如果我们将颜色应用到窗口,那么将会有从颜色切换到实际的斜杠屏幕。我建议的ans不需要setContentView,只能通过主题管理启动画面。

我们无法在java中设置主题,因为在我的情况下,控件来到我的启动活动的创建很晚。直到那个时候黑屏保持可见。

这让我知道窗口必须从我们在清单中指定的主题进行管理。

我有清单:

<activity
        android:name=".main.activities.SplashScreen"
        android:theme="@style/Splash"
        android:screenOrientation="portrait">
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
</activity>

现在我创建的主题如下:

<style name="Splash" parent="@style/Theme.AppCompat.Light">
    <item name="android:windowBackground">@drawable/splash</item>
    <item name="android:windowNoTitle">true</item>
    <item name="windowNoTitle">true</item>
    <item name="colorPrimaryDark">@color/green_09</item>
    <item name="colorPrimary">@color/green_09</item>
    <item name="windowActionBar">false</item>
</style>

在包含位图资源的可绘制资源中进行初始化,我必须调整一下以使其看起来完美而不是拉伸并位于中心:

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
    android:antialias="true"
    android:dither="true"
    android:gravity="fill"
    android:src="@drawable/splash_screen" />