【发布时间】:2018-01-21 08:11:39
【问题描述】:
我有一个 AsyncTask 调用第三方 API 并传递少量参数并获取 JSON 作为结果。但是,有时执行需要花费太多时间。假设,我只想执行这个 AsyncTask 30 秒,如果它没有在 30 秒内完成,那么中止 AsyncTask 并继续执行剩余的代码。您能否为此提供一些参考/示例?
【问题讨论】:
标签: android
我有一个 AsyncTask 调用第三方 API 并传递少量参数并获取 JSON 作为结果。但是,有时执行需要花费太多时间。假设,我只想执行这个 AsyncTask 30 秒,如果它没有在 30 秒内完成,那么中止 AsyncTask 并继续执行剩余的代码。您能否为此提供一些参考/示例?
【问题讨论】:
标签: android
您可以设置CountDownTimer 以在AsyncTask 运行超过30 秒时停止它。
例如:
new CountDownTimer(30000, 28000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
asyncTask.cancel(true); //
}
}.start();
另一种方式是Handler。
new Handler().postDelayed(new Runnable(){
@Override
public void run() {
asyncTask.cancel(true);
}
},30000)
另一种简单的方法是将您的 HTTP 调用的 Connection Timeout 设置为 30 秒。它会在 30 秒后自动结束异步任务。
【讨论】: