在我的 Android 应用程序中,用户可以选择在离线模式下使用该应用程序。当用户选择进入离线模式时,我会从服务器下载所有内容(甚至可能需要长达 7 分钟)以供离线使用。此后应用程序的使用取决于离线内容的下载。我正在使用一项服务来下载离线内容。但如果应用程序进入后台,该服务可能无法在 Android 8 中运行。那么下载适用于 Android 8 的离线内容的最佳方法是什么?是一个foreground service
还是JobIntentService
一个WorkManager
?
2 回答
任何由其支持的东西JobScheduler
——包括JobIntentService
和WorkManager
——都有 10 分钟的限制。您表示您的工作可能需要长达 7 分钟,这让我有些紧张。
在短期内,让您现有的服务成为前台服务,因为这将使您的代码保持工作(除了打盹模式可能带来的任何问题)。
如果你的 7 分钟下载工作真的是一系列加起来 7 分钟的小东西,你可能最终会迁移到WorkManager
. 将您的工作分成更小的部分,并使用 设置链式工作WorkManager
,因此您肯定不会超过任何这些工作块的 10 分钟限制。另外,WorkManager
允许您建立约束,说明您的工作仅应在您有 Internet 连接的情况下执行。不过,现在(2018 年 8 月下旬)WorkManager
只是,所以在至少达到最终版本之前1.0.0-alpha07
,我不会发布基于它的产品。WorkManager
1.0.0
最好的方法是使用WorkManager。如文档中所述:
WorkManager 适用于需要保证即使应用程序退出系统也会运行它们的任务,例如将应用程序数据上传到服务器,或从服务器下载数据。
使用 WorkManager 优于服务的好处包括处理打盹、待机、电池优化和约束执行等。
您可以使用 WorkManager 安排工作人员从服务器下载应用程序的数据,一旦数据可用,您就可以继续离线模式。