【问题标题】:Launcher activity setContentView delay启动器活动 setContentView 延迟
【发布时间】:2015-02-04 14:24:17
【问题描述】:

我创建了一个简单的应用程序,其中显示了 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();
    }

}

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

【问题讨论】:

    标签: android android-activity activity-lifecycle


    【解决方案1】:

    您可以定义活动的样式并在清单中进行设置。这样,当 Activity 运行时,它将使用其预定义的样式(您将在其中将背景或 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>
    

    然后在manifest中设置activity的样式:

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

    【讨论】:

      【解决方案2】:

      Sam 给出的答案是完美的,但可以扩展它 - 让您希望您的自定义初始屏幕图像始终可见,如果我们将颜色应用于窗口,那么将从颜色切换到实际的斜线屏幕.我建议的 ans 不需要 setContentView,只需要通过主题管理启动画面。

      我们无法在 java 中设置主题,因为在我的情况下,控件很晚才出现在我的启动活动的 onCreate 中。直到那时黑屏仍然可见。

      这给了我线索,窗口必须从我们在清单中指定的主题进行管理。

      我有清单:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-02
        相关资源
        最近更新 更多