剛開始想當(dāng)然,感覺很簡單的樣子丢氢,直接一個線程沉睡(進(jìn)行一些操作),然后在進(jìn)行頁面跳轉(zhuǎn)就可以了先改。然后一寫就出事了疚察。
最開始這樣寫的
try {
Thread.sleep(2000);
//SystemClock.sleep(2000); 效果一樣,因為SystemClock.sleep()內(nèi)部原理就是Thread.sleep()仇奶。區(qū)別只是他不會被interrupt貌嫡。
} catch (InterruptedException e) {
e.printStackTrace();
}
Intent intent = new Intent(SplashActivity.this, LoginActivity.class);
startActivity(intent);
首先說一點:這種寫法很不好,阻塞了主線程该溯,一旦超過5秒還會ANR〉撼現(xiàn)在很多直播軟件都在閃屏頁面接的廣告,五秒還是有的狈茉。
我們這里只沉睡2秒夫椭,暫且忽略。然后發(fā)現(xiàn)他只是暫停了2秒论皆,但是閃屏頁面的東西也沒有顯示出來益楼。苦思冥想不得其解点晴,那位仁兄幫忙解答一下疑惑啊!悯周!
現(xiàn)已解決疑惑粒督。
我原本以為在setContentView()這個方法時,View就已經(jīng)繪制了禽翼。然而事實是View的繪制實在onResume()方法之后才開始繪制屠橄。這里面的知識以后有空詳細(xì)寫一下。所以當(dāng)我在onCreate(), onResume()中沉睡主線程闰挡,然后進(jìn)行頁面跳轉(zhuǎn)時會出現(xiàn)看不見閃屏頁面的東西锐墙,而是直接跳轉(zhuǎn)到其他頁面了。
然后下面放上可行的方法长酗。
方法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);