Jetpack WorkManager - организация WorkRequest - PullRequest
0 голосов
/ 27 марта 2020

Я использую Jetpack WorkManager для синхронизации c моей базы данных с сетью. У меня много рабочих. Не очень приятно каждый раз создавать запросы типа

val request = OneTimeWorkRequestBuilder<SampleWorker>()
    .setConstraints(networkContraints)
    .build()

до

workManager.enqueue(request)

Есть ли у вас какие-либо идеи, как правильно извлечь создание этих запросов?

I ' Мы проверили образцы Google, включая приложение Sunflower, но не нашли хорошо организованное.

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Спасибо за вдохновение @Biscuit. Я настроил его для работы с di и сделал его более универсальным c для работы со всеми моими работниками по синхронизации.

class SyncManager(val context: Context) {

    inline fun <reified W : ListenableWorker> enqueue() {
        val workManager = WorkManager.getInstance(context)

        val constraints = Constraints.Builder()
            .setRequiredNetworkType(NetworkType.CONNECTED)
            .build()

        val request = OneTimeWorkRequest.Builder(W::class.java)
            .setConstraints(constraints)
            .build()

        workManager.enqueue(request)
    }
}

Я вызываю его как

syncManager.enqueue<UpdateUserWorker>()
0 голосов
/ 27 марта 2020

Я сделал это, простой синглтон, где вы объявляете своего работника и используете его в случае необходимости, может потребоваться некоторая оптимизация.

object WorkerObject {

    fun syncDb(context: Context){

        val workManager = WorkManager.getInstance(context)
        val constraints = Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)
                .build()

        val request = OneTimeWorkRequestBuilder<SampleWorker>()
                .setConstraints(constraints)
                .build()

        workManager.enqueue(request)
    }

}

, чтобы вызвать его:

WorkerObject.syncDb(application)
...