【发布时间】:2014-08-19 05:52:44
【问题描述】:
我有一个活动,它将它开始的任何 AsyncTask 添加到向量列表中。
当 Activity 被销毁时,它会通过向量列表并在所有 AsyncTask 上调用 onCancelled。
因此在每个 AsyncTask 中调用 OnCancelled,将一些私有字段设置为 null。这些私有字段引用了活动拥有的一些对象。这与 AsyncTasks 检查“isCancelled”一起意味着 AsyncTasks 将以干净的方式停止。
每个 AsyncTask 还具有对向量列表的引用。
这留下了一些剩余的问题/问题:
由于 AsyncTask 过去曾困扰过我:对于以下问题,API >= 8 的行为是否一致?
我假设只有在调用 cancel 时才调用 onCancelled。这意味着在这种情况下,让 Activity 维护向量列表并简单地将 AsyncTask 中对它的引用清空是否合理?
在 AsyncTask 后代中,onCancelled 在哪个线程中运行? AsyncTask 一或 main-ui-activity 一调用“取消”? (这对于清空私有字段的线程安全很重要)
每个 AsyncTask 是否应该在完成和销毁后找到并从列表中删除自己?假设析构函数在 AsyncTask 线程中运行,我是否只需要同步查找/删除操作?
【问题讨论】:
标签: java android multithreading android-asynctask