gpt4 book ai didi

java - 执行后台任务——替代 AsyncTask?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:18 25 4
gpt4 key购买 nike

我想在应用程序中有各种异步线程,例如大约 5-10 个线程 用于可以长时间运行(如流式传输)的后台任务,我也是 更新用户界面以在必要时发布一些结果。

据我所知,AsyncTask 存在以下问题:

  • 长时间运行的任务,
  • 与 Activity 生命周期联系不紧密,
  • 设备方向问题,以及
  • 内存泄漏等。

因此,我正在寻找不存在上述问题的替代方案(可能不使用任何第三方库)。

我应该使用简单 Java 线程更好吗?我不介意使用它们,因为它们不会给 AsynTask 带来任何问题。

最佳答案

在大多数情况下,AsyncTask 应该足以满足要求。但是,有些情况下无法使用 AsyncTask。即 AsyncTask 管理一个线程池,它从中拉取线程以供任务实例使用。现在线程池假设它们会在一段合理的时间后取回它们的线程。因此,在您不知道线程需要多长时间的情况下,您不能使用 AsyncTask。从 Android 4.4 开始,线程池的大小只能增长到:(CPU 核心数量 * 2) + 1。因此在双核处理器上,您可以创建的最大线程数限制为 5。

So, I am looking an alternative (possibly without using any third party libraries) which doesn't have these above problems.

关于 AsyncTask 的替代方案,这些是可用的选项:

  • 负责人
  • 可运行

现在所有后台线程都有缺点,无论它们的插图多么精美,其中一些包括:

  • 后台线程处理时用户交互的可能性。如果后台线程执行的工作发生改变,您需要将其传回给后台线程。 java.util.concurrent 有很多类可以在这些场景中提供帮助
  • 进程本身在线程执行任务时被杀死的可能性。因此,在这些情况下,与其使用 AsyncTask 或更简单的 Thread,不如使用 ServiceIntentService 将是一个理想的选择.
  • 后台线程内可能发生错误,例如在连接断开时从服务器检索数据,您需要手动关闭后台线程。

In short: Whichever option you choose, you'd need to manually handle all corner cases for the efficient and splendid working of the app.

附言:[引用]:The busy coder's guide to Android development v5.8由@Commonsware 根据知识共享署名非商业性相同方式共享 4.0 许可证发布

关于java - 执行后台任务——替代 AsyncTask?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41971777/

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