【问题标题】:Android - Alternative to async tasks?Android - 异步任务的替代方案?
【发布时间】:2013-11-08 11:42:04
【问题描述】:

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

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

【问题讨论】:

  • “我在很多地方读到过,当进程不超过 2-3 秒时,确实应该使用异步任务”。我不明白为什么。你能发布一些对这个“很多地方”的引用吗? AsyncTask 是一个 ExcetuorService 的后端。您可以随时 sublcas Thread 作为替代
  • 如果应该更频繁地发生同步,我可能会考虑将同步实现为服务。这样你就不需要关心应用程序做了什么。但是,在 android 开发方面我是菜鸟,所以有人可能会为您提供更好的答案...
  • 好问题,看看这个github.com/octo-online/robospice
  • @blackbelt 它在documentation中这么说
  • @nOiAd - 我检查了 robospice。虽然它看起来非常有用并解决了我的问题,但对于我目前的情况来说,它似乎也有点过头了。他们对整个过程有一些精彩的解释,也有一些很好的样本。但我认为他们缺少的是最简单场景的示例:使用异步网络请求执行长时间运行的网络操作并随进度更新的活动。至少我在他们的回购和维基中找不到它。如果我有更复杂的需求,我想我将来可能会使用它。

标签: android multithreading asynchronous memory-leaks android-asynctask


【解决方案1】:

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

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

【讨论】:

  • 不,除非用户连接到 Wi-Fi,否则不会进行下载。它也将是一次性下载,当然需要用户的批准。
  • 谢谢。我必须创建一个简单的自定义服务来实现这一点。无法使用下载管理器,因为我必须写入内部存储器 [Ya. 2 GB 内容存储到内部存储器。不要问为什么:(]。现在我有一个问题。我必须在我的活动中注册服务。我无法取消注册它,因为我需要我的活动能够接收来自服务的消息,即使屏幕熄灭以节省电量。问题:从内存泄漏的角度来看是否有害?
  • 所以我在之前的评论中找到了我的问题的答案。我对服务和广播接收器有点困惑。
【解决方案2】:

最好使用 IntentService 在后台执行长时间运行的任务。完成作业后也会自动完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    相关资源
    最近更新 更多