Android中的Thread.sleep(n)是否运行新线程?

时间:2013-12-21 23:54:15

标签: android multithreading android-asynctask

我有一个关于线程的棘手问题我无法找到答案。问题是我需要制作虚拟应用程序,启动闪屏2秒,然后启动新活动。用户可以通过按向后箭头停止此等待过程,然后应关闭闪屏并且不应打开第二个窗口。

我想到的是AsyncTakk,其中doInBackround为Thread.sleep(2000),而onPostExecute()新应用程序已打开。另外,我在onPause中取消了这个asynctask。

所以doInBackground看起来像这样:

protected Boolean doInBackground(Void... voids) {
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return true;
        }

我认为这是正确的做法。根据{{​​3}}:

  

使发送此消息的线程休眠给定的   时间间隔(以毫秒为单位)。精度不是   保证 - 线程可能比所请求的更多或更少地睡眠。

对我来说似乎没问题。

但是,我从检查它的人那里得到了信息,我在那里开始新的线程并且这是一个错误

我添加了严格的模式检查,没有。检查了eclipse中的线程,我也没有看到任何异常。

所以,我的问题是 - 我是否真的开始新线程,为什么,如果没有,你能提供一些链接,向他展示。

1 个答案:

答案 0 :(得分:0)

新帖子不是由sleep()创建的。可能由AsyncTask.execute()创建新线程。方法doInBackground()在'后台'线程中执行,而不是在主线程中执行。 AsyncTask.execute()不必创建新线程。它可以重用其内部使用的线程池中的现有“后台”线程。 你的解决方案没有错(实际上有些人可能认为它错了,因为它可能会创建一个不必要的线程),但是有一个更好的解决方案。您应该使用Handler.postDelayed(Runnable r, long delayMillis)

// call from main thread
Handler handler = new Handler();
handler.postDelayed(r, 2000); 
// the runnable r will contain the code that has to execute in 2000 milliseconds