gpt4 book ai didi

java - Android Activity ASyncTask 和 onCancelled

转载 作者:行者123 更新时间:2023-11-30 09:06:26 24 4
gpt4 key购买 nike

我有一个 Activity 将它启动的任何 AsyncTask 添加到 vector 列表。

当 Activity 被销毁时,它会遍历 vector 列表并在所有 AsyncTasks 上调用 onCancelled。

因此在每个 AsyncTask 中调用 OnCancelled,将一些私有(private)字段设置为 null。这些私有(private)字段引用了 Activity 拥有的一些对象。这与 AsyncTasks 检查“isCancelled”一起意味着 AsyncTasks 将以干净的方式停止。

每个 AsyncTask 还具有对 vector 列表的引用。

这留下了一些剩余的问题/问题:

  • 因为 AsyncTask 过去一直困扰着我:对于下面的问题,API >= 8 的行为是否一致

  • 我假设 onCancelled 仅在调用 cancel 时调用。这意味着在这种情况下,让 Activity 维护 vector 列表并简单地将 AsyncTask 中对它的引用设为空是否合理?

  • 在 AsyncTask 后代中,onCancelled 在哪个线程中运行? AsyncTask 一个或 main-ui-activity 一个调用“取消”? (这对于置空私有(private)字段的线程安全很重要)

  • 每个 AsyncTask 是否应该在完成和销毁后从列表中找到并删除自己?假设析构函数在 AsyncTask 线程中运行,我是否只需要同步查找/删除操作?

最佳答案

1)我所知道的 AsyncTask 中唯一的不一致是 execute 是真正并行的,而 executeOnExecutor 是真正并行的。

2) 是的,onCancelled 只有在调用 cancel 时才会被调用。但是请注意文档:在调用 cancel(boolean) 并且 doInBackground(Object[]) 完成后在 UI 线程上运行。

这意味着不会在任何线程上立即调用 onCancelled。

3)UI线程,根据文档

4)Java 没有析构函数。它有终结器,可能永远不会被调用,或者可能在 4 天后被调用。您不能依赖它们。

关于java - Android Activity ASyncTask 和 onCancelled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24463364/

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