gpt4 book ai didi

Android:从 doInBackground 取消 AsyncTask 时发出警告

转载 作者:太空狗 更新时间:2023-10-29 15:19:47 25 4
gpt4 key购买 nike

我遇到了这个问题:

我有一个主 Activity 请求另一个类的信息,该类从 Web 服务获取该信息,所以我在 AsyncTask 类上执行此操作。在加载数据时,主要的 Activity 显示一个 ProgressDialog,我正在处理后退按钮,因此当它被按下时我可以关闭对话框,但现在我想取消AsyncTask。我创建了一个静态 bool 变量,当按下后退按钮时它是“真”,所以从 AsyncTaskdoInBackground 方法我检查那个变量是否为真,如果它是true 我取消了 AsyncTask:

@Override protected Void doInBackground(Integer... args) {      
try {
....
if ( MainActivity.isDialogCancelled ){
cancel(true);
}
....
} catch (Exception e) {
....
}
}

这似乎工作正常,但当我以这种方式取消任务时,我看到了一个 InterruptedException 警告,为什么会发生这种情况以及我如何避免它们?我做错了什么?

这些是警告:

01-24 18:40:50.582: W/AsyncTask(22877): java.lang.InterruptedException
01-24 18:40:50.582: W/AsyncTask(22877): at java.util.concurrent.locks.AbstractQueuedSynchronizer.acquireSharedInterruptibly(AbstractQueuedSynchronizer.java:1272)
01-24 18:40:50.582: W/AsyncTask(22877): at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:220)
01-24 18:40:50.582: W/AsyncTask(22877): at java.util.concurrent.FutureTask.get(FutureTask.java:83)
01-24 18:40:50.582: W/AsyncTask(22877): at android.os.AsyncTask$3.done(AsyncTask.java:196)
01-24 18:40:50.582: W/AsyncTask(22877): at java.util.concurrent.FutureTask$Sync.innerCancel(FutureTask.java:294)
01-24 18:40:50.582: W/AsyncTask(22877): at java.util.concurrent.FutureTask.cancel(FutureTask.java:76)
01-24 18:40:50.582: W/AsyncTask(22877): at android.os.AsyncTask.cancel(AsyncTask.java:325)
01-24 18:40:50.582: W/AsyncTask(22877): at android.os.AsyncTask$2.call(AsyncTask.java:185)
01-24 18:40:50.582: W/AsyncTask(22877): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)
01-24 18:40:50.582: W/AsyncTask(22877): at java.util.concurrent.FutureTask.run(FutureTask.java:138)
01-24 18:40:50.582: W/AsyncTask(22877): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)
01-24 18:40:50.582: W/AsyncTask(22877): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)
01-24 18:40:50.582: W/AsyncTask(22877): at java.lang.Thread.run(Thread.java:1019)

提前致谢

最佳答案

为什么不使用 onPause() 中的 asyncTask.cancel(true);??

关于Android:从 doInBackground 取消 AsyncTask 时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8995047/

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