WorkManager alpha10 ListenableFuture использование - PullRequest
0 голосов
/ 18 октября 2018

У меня возникли некоторые проблемы при попытке установить последнюю версию WorkManager-alpha10 ListenableFuture для обработки завершения процесса.

Сейчас у меня на JobOrganizer class

* есть следующее1006 *

И это мой вызов, который должен прослушивать событие завершения.

val listenable = JobOrganizer.downloadData()
listenable.addListener({
    Log.d("Listenable", "Did something 1");
}, {
    Log.d("Listenable", "Did something 2");
})

Мне все еще не хватает того, как Runnable и Executor работают с этой функцией.Может кто-нибудь объяснить это?

Спасибо

Ответы [ 2 ]

0 голосов
/ 01 февраля 2019

Для ListenableFuture, Runnable - это код, который вы хотите запустить при завершении, а Executor сообщает ему, как именно запустить этот код (например, какой поток запустить).

Это должно работать на Kotlin:

listenableFuture.addListener(
    { /* Runnable: Code to run */ },
    { /* Executor: How to run */ }
)

Некоторые простые исполнители могут выглядеть следующим образом:

// Run on same thread (likely to be background thread):
{ it?.run }
// Run on main thread in android:
{ Handler(Looper.getMainLooper()).post(it) }
// Run with delay on main thread in android:
{ Handler(Looper.getMainLooper()).postDelayed(it, delayMillis) }

Например, использование в ViewModel может выглядеть так:

val dataDownloaded = MutableLiveData<Boolean>()
fun beginDownload() {
    downloadData.result.addListener(
        { dataDownloaded.postValue(true) },
        { it?.run() }
    )
}
0 голосов
/ 22 октября 2018

Вам нужно создать экземпляр Runnable и Executor, например, когда вы хотите выполнить Runnable напрямую и в текущем потоке:

.addListener(
    object:Runnable {
        override fun run() {
            Log.d("Listenable", "Did something 1");
        }
    },
    object:Executor {
        override fun execute(command: Runnable?) {
            command?.run()
        }
    }

Другие примеры вы можете найти в Executors на https://developer.android.com/reference/java/util/concurrent/Executor

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...