Android - 异步任务的替代方案?

标签 android multithreading asynchronous memory-leaks android-asynctask

所以我有一个应用程序,其中我使用异步任务使用 REST API 从 Django 后端获取数据。当设备需要与站点同步时,将首次使用此功能。 因此,此同步任务会获取相当多的数据 (2 GB)。我在很多地方都读到,当进程花费的时间不超过 2-3 秒时,确实应该使用异步任务。就我而言,肯定需要更长的时间。

  1. 那么我的选择是什么?处理程序?有人可以指出教程或文章来解释如何操作吗?
  2. 在同步过程中,我的设备会关闭显示屏以节省电量。因此,该 Activity 被破坏。现在,同步完成后,我使用“AlertDialog”类显示一个对话框,通知用户相同的信息。这会导致错误: Activity 泄漏了窗口。这是一个严重的问题吗?可以采取什么措施来避免这种情况?使用 fragment 显示对话框?

最佳答案

使用 Service .
它适用于长时间运行的任务,与您的 Activity 生命周期无关。
如果您还将通知与下载关联起来,显示进度,这对用户会特别有帮助(因为 2GB 可能需要花费大量时间来获取,尤其是在移动连接上。说到这一点 - 请不要通过移动连接获取 2GB 数据,而无需让用户真正清楚您要执行此操作,或者让他们选择不执行此操作,或者仅在通过 WiFi 连接时执行此操作。数据受限的用户会感谢您; )
Here's a tutorial about services

或者您可以让操作系统处理所有这些并使用 DownloadManager获取文件。它负责处理设备重启、连接问题等。
Sample project , Tutorial

关于Android - 异步任务的替代方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19858296/

相关文章:

android:如何截取屏幕截图并将其模糊化?

android - 相机启动预览失败

python - 从python中的另一个线程从 sleep 中唤醒特定线程

c++ - 如何在同一个函数上编写 pthread_create?

android - 如何显式地在另一个模块中启动一个 Activity

linux - 测量 Linux 多线程应用程序的堆栈使用情况

c# - 如何取消异步 WCF 调用?

asynchronous - 在Dart中合并Firestore的独立查询流

javascript - ReactJS:只按需渲染一些组件

android - 从内联类重新加载 ListView