Thread.Sleep在AsyncTask catch块中

时间:2014-02-25 20:38:28

标签: android android-asynctask

我目前正面临一个问题,即第一次调用Thread.sleep方法是正确执行的,但是catch块中的第二个调用没有。为了便于阅读,我删除了Thread.sleep调用的try catch块,没有引发异常。 AsyncTask立即进入onPostExecute,第二个Thread.sleep调用未运行。

问题出在哪里?

private class SomeTask extends AsyncTask<String, Void, String> {
    @Override
    protected void onPreExecute() {
        System.out.println("PreExecute done.");
    }

    @Override
    protected String doInBackground(final String... urls) {
        Thread.sleep(1000);

        try {
            doSomething();
        } catch (Exception e) {
            Thread.sleep(1000);
        }

        return "something";
    }

    @Override
    protected void onPostExecute(final String result) {
        doSomething();
    }
}

1 个答案:

答案 0 :(得分:1)

只有在catch块执行期间引发Throwable类(在您的情况下为Exception)的实例时,才会执行try块代码。看起来您可能正在寻找finally关键字。 以下代码片段将调用指定的函数,忽略任何引发的异常并将当前线程休眠1000毫秒。

 try {
      exceptionsRaisingMethod();
 }
 finally {
      // always sleep
      Thread.sleep(1000);
 }

上面的代码段实际上只是更好的方法:

 try {
      exceptionsRaisingMethod();
 }
 catch (Exception e) {
      // do nothing
 }

 Thread.sleep(1000); // always sleep