如何在后台运行期间在android上处理上传图像当Connection良好时,我具有架构,当Connection良好时,它可以上载,当Connection不良时,它将存储在本地,并且当Connection良好时,将很快自动重新上传。
最佳答案
您可以使用constraint on the connection在此用例中使用WorkManager。
您应该开始在数据存储区中记录要发送到后端的数据,然后在连接可用时排队要执行的WorkRequest。
您的工作人员“只是”需要将数据发送到后端。
要使工作人员入队,可以使用类似(here I'm enqueuing it as a unique work request, to avoid duplication)的方法:
val constraints = Constraints.Builder()
.setRequiredNetworkType(NetworkType.CONNECTED)
.build()
val syncDataWorker = OneTimeWorkRequestBuilder<SyncDataWorker>()
.setConstraints(constraints)
.build()
val operation = WorkManager.getInstance(this)
.enqueueUniqueWork(
uniqueConferenceDataWorker,
ExistingWorkPolicy.KEEP,
syncDataWorker)
然后可以使用coroutineWorker(a Worker class requires that all the content run synchronously)完成您的工作:
class RefreshMainDataWork(context: Context, params: WorkerParameters) :
CoroutineWorker(context, params) {
override suspend fun doWork(): Result {
return try {
// Retrieve data
// Sync Data asynchronously with a suspended function
Result.success()
} catch (error: TitleRefreshError) {
Result.failure()
}
}
}
这样的事情也可以在传输过程中为您重试和失去连接。当连接恢复时,工作人员将被停止并重新安排工作时间。
如果不知道需要同步哪些数据以及正在使用哪些库,就很难进行更详细的介绍。在coroutine's codelab中有一个有关如何使用
coroutineWorkers
的示例您可以参考WorkManager's documentation来了解如何使用它,还有一个简单的代码实验室展示了如何使用WorkManager。该代码实验室在Java和Kotlin中可用。
2019 version of ADSSched(用于Android开发者峰会的事件应用程序)使用类似的设置来根据请求下载更新,但是要遵循的过程更为复杂,因为它使用Dagger注入对用例的引用来刷新数据。 Here's the commit。
关于java - 连接良好时的图像上传,Android(背景流程),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59007304/