我们知道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
执行的好方法
提前致谢
答案 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[])
返回的值,以尽早完成任务。