刚开始想当然,感觉很简单的样子,直接一个线程沉睡(进行一些操作),然后在进行页面跳转就可以了。然后一写就出事了。
最开始这样写的
try {
Thread.sleep(2000);
//SystemClock.sleep(2000); 效果一样,因为SystemClock.sleep()内部原理就是Thread.sleep()。区别只是他不会被interrupt。
} catch (InterruptedException e) {
e.printStackTrace();
}
Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intent);
首先说一点:这种写法很不好,阻塞了主线程,一旦超过5秒还会ANR。现在很多直播软件都在闪屏页面接的广告,五秒还是有的。
我们这里只沉睡2秒,暂且忽略。然后发现他只是暂停了2秒,但是闪屏页面的东西也没有显示出来。苦思冥想不得其解,那位仁兄帮忙解答一下疑惑啊!!
现已解决疑惑。
我原本以为在setContentView()这个方法时,View就已经绘制了。然而事实是View的绘制实在onResume()方法之后才开始绘制。这里面的知识以后有空详细写一下。所以当我在onCreate(), onResume()中沉睡主线程,然后进行页面跳转时会出现看不见闪屏页面的东西,而是直接跳转到其他页面了。
然后下面放上可行的方法。
方法1
new Thread() {
@Override
public void run() {
super.run();
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intent);
}
}.start();
方法2
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intent);
}
},2000);