Oreo上的长时间网络运行

时间:2018-08-21 11:19:03

标签: android android-service android-8.0-oreo android-workmanager jobintentservice

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

2 个答案:

答案 0 :(得分:1)

JobScheduler支持的所有内容(包括JobIntentServiceWorkManager)的时限为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从服务器下载应用程序的数据,一旦数据可用,就可以继续使用离线模式。