在我的Android应用程序中,用户可以选择在脱机模式下使用应用程序。当用户选择进入脱机模式时,我从服务器下载所有内容(这可能需要7分钟)以供脱机使用。从此应用程序的使用取决于脱机内容的下载。我正在使用一个服务下载离线内容。但是,如果Android 8成为后台应用程序,该服务可能无法工作。那么,下载Android 8的离线内容的最佳方法是什么呢?是foreground service还是JobIntentService,还是WorkManager?
发布于 2018-08-21 11:37:43
任何得到JobScheduler支持的东西--包括JobIntentService和WorkManager --都有10分钟的限制。你表示你的工作可能需要7分钟,这让我有点紧张。
在短期内,使现有服务成为前台服务,因为这将使您的代码正常工作(除了Doze模式可能带来的任何问题)。
如果您的7分钟下载工作实际上是一系列较小的事情,加起来只有7分钟,那么您可能最终会迁移到WorkManager。将您的工作划分为较小的块,并使用WorkManager设置链式工作,因此您肯定不会超过任何这些工作块的10分钟限制。此外,WorkManager还允许您建立约束,说明只有在有Internet连接的情况下才应该执行您的工作。然而现在(2018年8月底),WorkManager只是1.0.0-alpha07,所以我不会发布基于WorkManager的产品,直到它至少达到1.0.0的最终版本。
发布于 2018-08-21 11:33:12
最好的方法是使用WorkManager。如文件所述:
WorkManager的目的是为了保证即使应用程序退出,系统也会运行它们,比如将应用程序数据上传到服务器,或者从服务器下载数据。
使用WorkManager优于服务的好处包括处理打瞌睡、待机、电池优化和约束执行等。
您可以安排使用WorkManager的工作人员从服务器下载应用程序的数据,一旦数据可用,就可以继续您的脱机模式。
https://stackoverflow.com/questions/51947535
复制相似问题