gpt4 book ai didi

Android:为 AsyncTask 设置超时

转载 作者:太空狗 更新时间:2023-10-29 14:54:52 24 4
gpt4 key购买 nike

我们知道 AsyncTask 在 Android 中用于短时间后台进程。一般我们用于WepApi解析,在某些时候"doInBackground()"会执行很长时间来获取响应。

假设在执行 doInBackground 时,如果我们的网络中断了,进度条仍在努力获取结果。

所以我的问题是我们可以为 doInBackground 执行设置一个超时,如果它执行超过 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);

但应用程序将被强行关闭

什么是设置超时 doInBackground exection 的好解决方案

提前致谢

最佳答案

首先执行您的 AsyncTask,然后调度 TimerTask 2 分钟后。

当计时器响起时,检查 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)方法将导致在之后在UI线程上调用onCancelled(Object) >doInBackground(Object[]) 返回。调用此方法可确保永远不会调用 onPostExecute(Object)。调用此方法后,您应该定期检查 doInBackground(Object[])isCancelled() 的返回值,以尽早完成任务。

关于Android:为 AsyncTask 设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32515844/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com