奥利奥长网运营

Long network operation on Oreo

在我的 Android 应用程序中,用户可以选择在离线模式下使用该应用程序。当用户选择进入离线模式时,我从服务器下载所有内容(这可能需要长达 7 分钟)以供离线使用。今后该应用程序的使用取决于离线内容的下载。 我正在使用一项服务来下载离线内容。但如果应用程序进入后台,该服务可能无法在 Android 8 中运行。那么下载 Android 8 离线内容的最佳方法是什么?是 foreground serviceJobIntentService 还是 WorkManager

最好的方法是使用 WorkManager。正如文档中所述:

WorkManager is intended for tasks that require a guarantee that the system will run them even if the app exits, like uploading app data to a server, or downloading data from server.

使用 WorkManager 而不是服务的好处包括处理打瞌睡、待机、电池优化和约束执行等。

您可以使用 WorkManager 安排工作人员从服务器为您的应用下载数据,一旦数据可用,您就可以继续离线模式。

任何由 JobScheduler 支持的内容(包括 JobIntentServiceWorkManager)都有 10 分钟的限制。你表示你的工作最多可能需要7分钟,这让我有些紧张。

在短期内,将您现有的服务设为前台服务,因为这将使您的代码保持正常工作(打瞌睡模式可能带来的任何问题除外)。

如果您的 7 分钟下载工作真的是一系列加起来长达 7 分钟的小事情,您最终可能会迁移到 WorkManager。将您的工作分成更小的块,并使用 WorkManager 设置链式工作,因此您肯定不会超过任何这些工作块的 10 分钟限制。另外,WorkManager 允许您建立约束,说明您的工作只有在您有 Internet 连接时才能执行。不过现在(2018 年 8 月下旬),WorkManager 只是 1.0.0-alpha07,所以我不会发布基于 WorkManager 的产品,直到它至少达到 1.0.0 最终版本.