- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当连接良好时,如何在后台处理Android上的上传图像?我有模式,当连接良好时,它可以上传,当连接不好时,它将存储在本地,并在连接时很快自动重新上传很好。
最佳答案
您可以使用 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要了解如何使用它,还有一个简单的 Codelab 展示了如何使用 WorkManager。该 Codelab 位于 Java并在 Kotlin .
2019 version of ADSSched (the event app for the Android Developer Summit) uses a similar setup to download updates on request, but it's more complex to follow as it uses Dagger to inject the reference to the use case to refresh the data. Here's the commit.
关于java - 连接良好时上传图片,Android(后台进程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59007304/
我有以下正则表达式 /[a-zA-Z0-9_-]/ 当字符串只包含从 a 到z 大小写、数字、_ 和 -。 我的代码有什么问题? 能否请您向我提供一个简短的解释和有关如何修复它的代码示例? //var
我是一名优秀的程序员,十分优秀!