我目前正面临一个问题,即第一次调用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();
}
}
答案 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