奥利奥长网运营
Long network operation on Oreo
在我的 Android 应用程序中,用户可以选择在离线模式下使用该应用程序。当用户选择进入离线模式时,我从服务器下载所有内容(这可能需要长达 7 分钟)以供离线使用。今后该应用程序的使用取决于离线内容的下载。
我正在使用一项服务来下载离线内容。但如果应用程序进入后台,该服务可能无法在 Android 8 中运行。那么下载 Android 8 离线内容的最佳方法是什么?是 foreground service
或 JobIntentService
还是 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
支持的内容(包括 JobIntentService
和 WorkManager
)都有 10 分钟的限制。你表示你的工作最多可能需要7分钟,这让我有些紧张。
在短期内,将您现有的服务设为前台服务,因为这将使您的代码保持正常工作(打瞌睡模式可能带来的任何问题除外)。
如果您的 7 分钟下载工作真的是一系列加起来长达 7 分钟的小事情,您最终可能会迁移到 WorkManager
。将您的工作分成更小的块,并使用 WorkManager
设置链式工作,因此您肯定不会超过任何这些工作块的 10 分钟限制。另外,WorkManager
允许您建立约束,说明您的工作只有在您有 Internet 连接时才能执行。不过现在(2018 年 8 月下旬),WorkManager
只是 1.0.0-alpha07
,所以我不会发布基于 WorkManager
的产品,直到它至少达到 1.0.0
最终版本.
在我的 Android 应用程序中,用户可以选择在离线模式下使用该应用程序。当用户选择进入离线模式时,我从服务器下载所有内容(这可能需要长达 7 分钟)以供离线使用。今后该应用程序的使用取决于离线内容的下载。
我正在使用一项服务来下载离线内容。但如果应用程序进入后台,该服务可能无法在 Android 8 中运行。那么下载 Android 8 离线内容的最佳方法是什么?是 foreground service
或 JobIntentService
还是 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
支持的内容(包括 JobIntentService
和 WorkManager
)都有 10 分钟的限制。你表示你的工作最多可能需要7分钟,这让我有些紧张。
在短期内,将您现有的服务设为前台服务,因为这将使您的代码保持正常工作(打瞌睡模式可能带来的任何问题除外)。
如果您的 7 分钟下载工作真的是一系列加起来长达 7 分钟的小事情,您最终可能会迁移到 WorkManager
。将您的工作分成更小的块,并使用 WorkManager
设置链式工作,因此您肯定不会超过任何这些工作块的 10 分钟限制。另外,WorkManager
允许您建立约束,说明您的工作只有在您有 Internet 连接时才能执行。不过现在(2018 年 8 月下旬),WorkManager
只是 1.0.0-alpha07
,所以我不会发布基于 WorkManager
的产品,直到它至少达到 1.0.0
最终版本.