Android 启动屏幕仅在首次安装时起作用

Android 启动屏幕仅在首次安装时起作用,android,android-asynctask,splash-screen,android-theme,Android,Android Asynctask,Splash Screen,Android Theme,我已经实现了一个闪屏,它只在应用程序的第一次安装/运行时工作良好。后续强制停止/运行(在应用程序已经运行一次之后)仅在屏幕上快速显示启动屏幕“闪烁”。闪屏活动的主题就是本例中看到的所有内容 SplashScreen.java protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mSplashDialog = new Dialog(this, R.styl

我已经实现了一个闪屏,它只在应用程序的第一次安装/运行时工作良好。后续强制停止/运行(在应用程序已经运行一次之后)仅在屏幕上快速显示启动屏幕“闪烁”。闪屏活动的主题就是本例中看到的所有内容

SplashScreen.java

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mSplashDialog = new Dialog(this, R.style.Theme_Splash);
    mSplashDialog.setContentView(R.layout.normal_launch_screen);
    mSplashDialog.show();

    new DatabaseLoaderTask().execute();
}
DatabaseLoaderTask.onPostExecute

protected void onPostExecute(Void result) {
    super.onPostExecute(result);

    // will close this activity and launch main activity
    Intent i = new Intent(SplashScreen.this, myActivity.getClass());
    startActivity(i);

    // close this activity
    finish();
}
显示

<activity
    android:name="com.example.app.SplashScreen"
    android:label="@string/app_name"
    android:theme="@style/Theme_Splash" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

<activity
    android:name="com.example.app.MainActivity"
    android:label="@string/app_name" >
</activity>

DatabaseLoaderTask在后续运行(可能是其一部分)时执行得更快。我几乎认为在第一次运行时,splash会等待MainActivity UI准备就绪,但在随后的运行中,它不会这样做,因此SplashScreen活动会提前结束,我会盯着空白屏幕等待几秒钟(Theme_splash)


注意:当我不使用启动屏幕的
对话框时,我得到了相同的结果,我只做了一个
setContentView(R.layout.normal\u launch\u屏幕)

你说得对。splash将只显示databaseloadertask运行所需的时间。如果要确保它显示的时间最短,请尝试以下方法:

    mSplashDialog = new Dialog(this, R.style.Theme_Splash);
    mSplashDialog.setContentView(R.layout.normal_launch_screen);
    mSplashDialog.show();
   // Start timer and launch main activity
      MyLauncher launcher = new MyLauncher();
      launcher.start();
    }

     private class MyLauncher extends Thread {
      @Override
      /**
       * Sleep for some time and than load database.
       */
      public void run() {
         try {
            // Sleeping
            Thread.sleep(3000);
         } catch (Exception e) {
            Log.e("splash", e.getMessage());
         }

         new DatabaseLoaderTask().execute();
      }
    }

你的问题是什么?问题是在显示主要活动之前仍然有延迟,但我没有看到启动屏幕,而是看到一个空白屏幕。启动屏幕的概念来自iOS。iOS显示iOS加载应用程序时的启动屏幕(而不是下载数据时)。然而,Android没有像iOS那样的启动屏幕。若你们想这样做,那个么就用定时器等待几秒钟,但在显示主应用程序之前,让用户无缘无故地等待几秒钟听起来并不好。