【发布时间】:2015-09-25 08:26:46
【问题描述】:
我可以找到两种方法来实现splash screen:
public class MainSplashScreen extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_splash_screen);
// METHOD 1
/****** Create Thread that will sleep for 5 seconds *************/
Thread background = new Thread() {
public void run() {
try {
// Thread will sleep for 5 seconds
sleep(5*1000);
// After 5 seconds redirect to another intent
Intent i=new Intent(getBaseContext(),MainActivity.class);
startActivity(i);
//Remove activity
finish();
} catch (Exception e) {
}
}
};
// start thread
background.start();
//METHOD 2
/*
new Handler().postDelayed(new Runnable() {
// Using handler with postDelayed called runnable run method
@Override
public void run() {
Intent i = new Intent(MainSplashScreen.this, MainActivity.class);
startActivity(i);
// close this activity
finish();
}
}, 5*1000); // wait for 5 seconds
*/
}
@Override
protected void onDestroy() {
super.onDestroy();
}
}
正如预期的那样,这两种方法都首先显示启动屏幕 5 秒,然后启动 MainActivity。
在我的应用中,MainActivity 的启动相对耗时。因此,我在这两种方法中看到的都是启动屏幕 5 秒,然后是黑屏几秒钟(就像我不使用启动屏幕时一样),然后是 MainActivity。
问题是如何在初始屏幕显示期间启动 MainActivity。
我尝试定义两个线程并同时运行,但结果与我不使用闪屏时完全一样。
Thread background = new Thread() {
public void run() {
try {
sleep(5*1000);
finish();
} catch (Exception e) {}
}
};
Thread mainTh = new Thread() {
public void run() {
try {
Intent i=new Intent(getBaseContext(),MainActivity.class);
startActivity(i);
} catch (Exception e) {}
}
};
mainTh.start();
background.start();
【问题讨论】:
-
为什么不在启动时初始化数据?您可以使用后台任务进行初始化,当任务完成后,您可以在 onPostExecute 方法中启动下一个活动。
标签: android splash-screen