java - 连接良好时上传图片,Android(后台进程)

标签 java android android-fragments upload android-workmanager

当连接良好时,如何在后台处理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/

相关文章:

java - 在 JTextField 上设置光标的水平位置

java - 我的简单 Selenium 程序没有运行?

java - 如何检查 URL 是否被我的防火墙阻止

android - Google Analytics - Android 应用跳出率

java.lang.NullPointerException : Attempt to read from field 'double com.google.android.gms.maps.model.LatLng.a' on a null object reference 异常

android - 如何在fragment中实现onclick listview?

android - 无法从 androidx.fragment.app.Fragment.getViewModelStore 处的分离 fragment 访问 spy ( fragment )对象的 ViewModel

java - Android套接字聊天连接错误

java - 从 Play 商店下载时出现类未找到异常

java - 深度嵌套链中的 fragment 之间如何通信?