2017-08-13 79 views
0

我有调用第三方API并传递一些参数,并得到JSON作为结果的的AsyncTask。但是,有时需要太多时间来执行。假设我想只执行这个AsyncTask 30秒,如果它没有在30秒内完成,那么放弃AsyncTask并继续执行剩下的代码。你能给一些参考/例子吗?限制AsyncTask执行时间的简单方法是什么?

+2

检查[这个苏答案(https://stackoverflow.com/a/31601166/5392118) –

回答

2

您可以设置CountDownTimer停止AsyncTask如果它运行超过30秒。

例如:

new CountDownTimer(30000, 28000) { 

public void onTick(long millisUntilFinished) { 

    } 

    public void onFinish() { 
     asyncTask.cancel(true); // 
     } 
    }.start(); 

另一种方式是处理程序

new Handler().postDelayed(new Runnable(){ 
    @Override 
    public void run() { 
     asyncTask.cancel(true); 
     } 
    },30000) 

另一种简单的方法是设置连接超时您的HTTP调用到30秒。它会在30秒后自动结束异步任务。

+0

我可以在主/ UI线程代码呢? – djac

+0

当然可以。它实际上在后台运行。不要在倒数计时器内使用UI组件。 –

+0

查看我更新的答案。如果您还需要在其中使用UI组件。您可以使用处理程序。 –

相关问题