闪屏页面遇到的一些问题

刚开始想当然,感觉很简单的样子,直接一个线程沉睡(进行一些操作),然后在进行页面跳转就可以了。然后一写就出事了。
最开始这样写的

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);

你可能感兴趣的:(闪屏页面遇到的一些问题)