Для 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() }
)
}