【问题标题】:How to cancel AsyncTask or all AsyncTask including nested AsyncTasks from same Activity?如何取消 AsyncTask 或所有 AsyncTask,包括来自同一 Activity 的嵌套 AsyncTasks?
【发布时间】:2013-02-10 20:37:11
【问题描述】:

我有 activity 使用 AsyncTask 打开光标,而不是生成 children AsyncTask 来呈现项目 使用光标读取。

Activity 在 cursor AsyncTask 上执行,但看不到 children AsyncTask 的项目。

如何取消指定Activity所有正在运行的AsyncTask任务(包括嵌套)?

如何取消指定 AsyncTask 的所有正在运行的子 AsyncTask 任务(如果可能的话)?

我想停止从界面到未损坏视图的新命令上的所有任务。

【问题讨论】:

    标签: android android-asynctask


    【解决方案1】:

    您执行的 AsyncTask 没有管理器。

    您必须跟踪您创建的 AsyncTasks 的所有新实例,并使用cancel(boolean mayInterruptIfRunning) 方法关闭它们。 请注意,取消任务不会在中间停止它。你必须检查你的doInBackground - isCanceled()

    【讨论】:

    • 好建议 - 看来我必须管理任务。一些额外的问题,如果 AsyncTasks onPostExecute 将在任务产生时按顺序执行,还是需要在 Android 中管理?
    • onPostExecute 在 doInBackground 完成后立即生成(除非任务被取消,然后它根本不会生成)。所以答案是否定的——没有顺序。
    • 谢谢,它可以像正常线程一样工作,很高兴听到 - 我会接受答案。
    • 我刚刚发现 HONEYCOMB 的默认行为发生了变化,因为如果不启用更多,它会在一个线程中执行。请参阅(SERIAL_EXECUTOR 和 THREAD_POOL_EXECUTOR)不确定它是否给出命令但可以。
    【解决方案2】:

    如果您的 AsyncTask 正在运行循环,那么您可以检查一个公共标志(可能是某个单例的属性,例如 Application 类本身或您的活动)。一旦这个标志变为真,那么你的任务将退出循环

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多