我可以找到两种方法来实现splash screen:
"dd/MM/yyyy"
正如预期的那样,两种方法首先显示启动画面5秒钟,然后启动MainActivity。
在我的应用程序中,MainActivity启动相对耗时。因此,我在两种方法中看到的是启动屏幕5秒,然后黑屏显示几秒钟(比如我不使用启动画面),然后是MainActivity。
问题是如何在初始屏幕的演示期间启动MainActivity。
我尝试定义两个线程并同时运行,但结果与我不使用启动画面完全一样。
"dd/MM/yyyy"
答案 0 :(得分:2)
使用Ian Lake的最佳做法 - post。当您的活动加载所有组件时,这会为您提供品牌屏幕。
如果您要将应用冻结5秒钟 - 这不是最好的主意,但您可以这样做。只需将延迟后的消息发送给处理程序。在Handler中,您可以使用setContent等来捕获消息并初始化您的活动......
答案 1 :(得分:1)
试试这个,
public class Splash extends Activity {
private static final int SPLASH_SHOW_TIME = 1000;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Fabric.with(this, new Crashlytics());
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_splash);
new BackgroundSplashTask().execute();
}
private class BackgroundSplashTask extends AsyncTask<Void, Void, Void> {
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... arg0) {
try {
Thread.sleep(SPLASH_SHOW_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void result) {
super.onPostExecute(result);
Intent i = new Intent(Splash.this, MainActivity.class);
startActivity(i);
finish();
}
}
}
答案 2 :(得分:0)
您可以使用以下代码进行切换。
Handler mHandler = new Handler();
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
startActivity(new Intent(SplashActivity.this,MainActivity.class));
finish();
}
}, 2000);