如何在后台运行期间在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。该代码实验室在JavaKotlin中可用。


  2019 version of ADSSched(用于Android开发者峰会的事件应用程序)使用类似的设置来根据请求下载更新,但是要遵循的过程更为复杂,因为它使用Dagger注入对用例的引用来刷新数据。 Here's the commit

关于java - 连接良好时的图像上传,Android(背景流程),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59007304/

10-10 22:18