gpt4 book ai didi

java - 为什么 AsyncTask 不适合长时间运行的操作

转载 作者:太空宇宙 更新时间:2023-11-03 12:31:09 25 4
gpt4 key购买 nike

我已阅读以下提到的两个原因/问题:
(请阅读以下链接中的两个原因)
Android AsyncTask for Long Running Operations
1. “如果在 Activity 中启动 AsyncTask 并旋转设备,Activity 将被销毁并创建一个新实例。但 AsyncTask 不会消失”:
假设我已将我的 Activity 方向设置为纵向。这个问题还会存在吗?

2.内存泄漏问题:
内部类将在其外部类实例上持有一个不可见的引用:Activity。
如果我不使用 Inner AsyncTask 而是创建单独的类怎么办。另外,如果我使用弱引用。

最佳答案

你提到的问题只有在 AsyncTask 的生命周期处理不当时才会出现,主要是对它们的工作原理缺乏了解。

AsyncTask 是一个包装器,用于在单独的线程上运行代码。它类似于普通 Java 的 Runnable 提交给 ExecutorService,具有在主线程上运行的“pre”和“post” Hook 的附加功能。所以,它基本上是 ThreadRunnableHandler 设置的增强版本。

默认情况下,AsycTask 共享一个线程,因此不建议用于长时间运行的任务。因为当一个后台线程被多个任务共享时,一个长时间运行的任务可能会阻塞其他任务。但是,AsycTask 也可以在自定义 Executor 上运行,从而消除共享工作线程的此类限制。

所有这些都意味着 AsyncTask 自己的设计不会限制它在长时间运行的任务中的使用。

您可以让后台 Service 在单独的 ThreadPoolExecutor 上使用 AsyncTasks 运行一些连续处理。

您可以使用 AsyncTask 让 Fragment 加载最新消息,当调用 Fragment 的 onDestroy() 时,您可以取消任务,因为它不再有意义。

因此“AsyncTask 应该运行多长时间”的答案完全取决于使用上下文。

关于java - 为什么 AsyncTask 不适合长时间运行的操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33826639/

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