Android 启动屏幕仅在首次安装时起作用
我已经实现了一个闪屏,它只在应用程序的第一次安装/运行时工作良好。后续强制停止/运行(在应用程序已经运行一次之后)仅在屏幕上快速显示启动屏幕“闪烁”。闪屏活动的主题就是本例中看到的所有内容 SplashScreen.javaAndroid 启动屏幕仅在首次安装时起作用,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
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那样的启动屏幕。若你们想这样做,那个么就用定时器等待几秒钟,但在显示主应用程序之前,让用户无缘无故地等待几秒钟听起来并不好。