在我的Android应用程序中,用户可以选择以离线模式使用该应用程序。当用户选择进入离线模式时,我从服务器下载了所有内容(可能最多需要7分钟)以供离线使用。此后,该应用程序的使用取决于离线内容的下载。
我正在使用一项服务来下载离线内容。但是,如果应用转到后台,则该服务可能无法在Android 8中运行。那么,下载Android 8离线内容的最佳方法是什么?是foreground service
还是JobIntentService
还是WorkManager
?
答案 0 :(得分:1)
由JobScheduler
支持的所有内容(包括JobIntentService
和WorkManager
)的时限为10分钟。您表示您的工作最多可能需要7分钟,这使我有些紧张。
在短期内,使现有服务成为前台服务,因为这将使您的代码正常运行(“打ze模式可能造成的任何问题除外)。
如果7分钟的下载工作实际上是一系列较小的事情,总计7分钟,那么您最终可能会迁移到WorkManager
。将您的工作分成较小的块,并使用WorkManager
设置链接的工作,因此您肯定不会超过10分钟的限制。另外,WorkManager
使您可以建立约束条件,以说仅当您有Internet连接时才可以执行工作。不过,目前(2018年8月下旬),WorkManager
仅为1.0.0-alpha07
,因此,我不会发布基于WorkManager
的产品,直到它至少达到1.0.0
的最终版本
答案 1 :(得分:0)
最好的方法是使用WorkManager。如文档中所述:
WorkManager用于需要保证以下各项的任务: 即使应用程序退出,系统也会运行它们,例如将应用程序数据上传到 服务器,或从服务器下载数据。
与服务相比,使用WorkManager的好处包括打of睡,待机,电池优化和约束执行等。
您可以安排工作人员使用WorkManager从服务器下载应用程序的数据,一旦数据可用,就可以继续使用离线模式。