1

在加载我的 android 应用程序期间,我想在启动的前 2.3 秒内显示一个徽标,我认为它比在启动后看到一个 UI 更难看。因此,在我的代码中,我首先制作了一个带有徽标(飞溅)的 setContentView,然后是带有 UI(主)的 setContentView。pb 没有看到徽标屏幕,而是看到了黑屏。我在主线程中这样做,所以我不明白。你有问题的解释,如果可能的话,有解决方法吗?

Activity 的 onCreate() 不能正常工作如下(黑屏 5 秒后可以看到 UI,没有异常抛出):

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash); //doesn't work
    Log.i(TAG, Thread.currentThread().getName());
    //this.r
    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        Log.i(TAG, Thread.currentThread().getName() + e.toString() );
    }
    setContentView(R.layout.main); //work OK
}

}

如果我只是用下面的代码离开课堂,没有问题,我可以看到“第一个”并且只有视图:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash); //work OK

} }

4

2 回答 2

4

pb 没有看到徽标屏幕,而是看到了黑屏。

Thread.sleep()是错误的方法。您正在阻止一切发生,包括显示您的启动画面。

Activity 的 onCreate() 不能正常工作如下(黑屏 5 秒后可以看到 UI,没有异常抛出)

布局仅在调用 onResume()显示,因此通过阻塞 UI 线程,onCreate()您创建了空白屏幕。然后当线程恢复时,两个布局都被绘制,但你永远不会看到启动屏幕,因为下一个setContentView()是在几毫秒后调用的。


虽然使用闪屏的想法值得商榷,但您应该在五秒后使用回调来更改布局。使用 Handler 和 Runnable 来改变屏幕。

插入我的个人意见,我会拒绝任何需要 5 秒才能加载的应用程序。每次打开应用程序时,我都有比看徽标甚至 2-3 秒更好的事情要做。


虽然我喜欢 ρяσѕρєя K 的回答,但我会扮演魔鬼的拥护者。我更喜欢使用根视图的内置处理程序:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.splash);
    findViewById(android.R.id.content).postDelayed(new Runnable() {
        @Override
        public void run() {
            setContentView(R.layout.main);
        }
    }, 1000);
}
于 2013-01-01T18:34:51.247 回答
4

您可以在主 UI 线程中使用TimerTask而不是使用Thread.sleepfor 在主 UI 线程中进行等待:

new Timer().schedule(new TimerTask() {
    @Override
    public void run() {
        // use runOnUiThread for Updating Ui elements
        Your_Activity.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                 // set Activity Next layout Here
                setContentView(R.layout.main);
            }
        });
    }
}, 5000);
于 2013-01-01T18:35:20.453 回答