Android:为AsyncTask设置超时

时间:2015-09-11 05:05:38

标签: android android-asynctask

我们知道AsyncTask在Android中用于短时间后台进程。通常我们使用WepApi解析,在一段时间内“ doInBackground() ”执行很长时间以获得响应。

假设在执行 doInBackground 时,如果我们的互联网消失了,进度条仍然可以获得结果。

所以我的问题是我们可以为 doInBackground 执行设置一个TIMEOUT,就好如果执行时间超过2分钟,请停止 doInBackground 执行并致电 onPostExecute

我在 doInBackground 电话

中尝试了这种方法
 protected Void doInBackground(String... params) {
        // TODO Auto-generated method stub
        //String request = String.format(params[0], "12");
        Log.e("Tag " ,"Pasing Start");
        replay= getResponseByParsing(URL);
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {

               Toast.makeText(MainActivity.this,"Checking async task",Toast.LENGTH_LONG).show();
            }
        }, 20000);

但应用程序将强行关闭

设置TIMEOUT doInBackground 执行的好方法

提前致谢

1 个答案:

答案 0 :(得分:0)

首先执行AsyncTask,然后在2分钟后安排TimerTask

当计时器点击时,请检查AsyncTask Status

如果它处于RUNNING州,则Cancel AsyncTask位于AsyncTask.cancel(true)

请稍后检查isCancelled(),如下所示:

 protected Object doInBackground(Object... x) {
    while (/* condition */) {
      // work...
      if (isCancelled()) break;
    }
    return null;
 }

注意:调用AsyncTask.cancel(true)方法将导致在onCancelled(Object)返回后在UI线程上调用doInBackground(Object[])。调用此方法可确保永远不会调用onPostExecute(Object)。调用此方法后,您应该定期检查isCancelled()doInBackground(Object[])返回的值,以尽早完成任务。