启动画面仅适用于首次安装

时间:2014-01-23 00:07:42

标签: android android-asynctask splash-screen android-theme

我已经实现了一个启动画面,只在第一次安装/运行应用程序时效果很好。随后的强制停止/运行(在应用程序已经运行一次之后)仅在屏幕上快速“闪烁”显示闪屏。在这种情况下,可以看到启动画面活动的主题。

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在后续运行中执行得更快,这可能是其中的一部分。我几乎认为在第一次运行时,启动等待直到MainActivity UI准备就绪,但在后续运行中它不会使SplashScreen活动提前结束,我等待盯着空白屏幕几秒钟(Theme_Splash)。 p>

注意:我得到相同的结果,而不是使用Dialog作为启动画面我只需setContentView(R.layout.normal_launch_screen);

1 个答案:

答案 0 :(得分:0)

你是对的。您的启动只会显示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();
      }
    }
相关问题