【问题标题】:AsyncTask cancelling issueAsyncTask 取消问题
【发布时间】:2011-07-14 11:46:50
【问题描述】:

我有一个 AsyncTask 并且 doInBackground 方法正在实现通常需要更多时间的东西。所以我正在做两个异步任务,当第二个开始时,我想停止第一个。

因此,如果我有

@Override
protected Bitmap doInBackground(Integer... params) {
  books.download(13);
}

而真正重要的部分发生在 download(int) 方法中。

现在,当我在此任务上执行 cancel(true) 时,我希望停止下载。因此,我希望 books.download(13) 方法能够中断

有什么办法吗?

【问题讨论】:

  • 我认为我们需要更多代码。 book.download 是如何实现的?此外,您的示例无法编译。
  • 你的下载方法是做什么的?
  • books.download(int) 不是我的方法 :( 这就是为什么我无法更好地控制它。我将它用作我正在使用的专有库的一部分。
  • 一篇关于如何取消异步任务的好帖子quicktips.in/correct-way-to-cancel-an-asynctask-in-android

标签: java android multithreading android-asynctask


【解决方案1】:

Android 不会中断您的方法,您必须这样做。 cancel(bool) 调用 onCancelled(bool) 方法。如果你不实现这个方法,什么都不会发生。

【讨论】:

  • Thread::interrupt() 是否会中断线程,如“杀死它”?也许我应该这样做......
  • 很好奇,Thread.interrupt() 在 Oracle Java 上已被弃用多年,因为这是不好的做法(我假设)。你可能必须在你的线程中做一些尝试/捕捉来处理这个问题,并很好地清理。最好的解决方案是设置一个标志,让您的 books.download(int) 不时检查。
  • 我不能,因为 books.download(int) 不是我的方法,它来自我正在使用的专有库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多