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