在应用程序中使用 Future 块 UI

问题描述 投票:0回答:1

在我的 Android 应用程序中,我想使用 java.util.concurrent 工具来进行返回值的操作(用于教育目的)。我读到 Future with Callable 可以用于此目的。我做了一个项目,我模拟了一个需要一些时间才能执行的操作:

class MyRepository {

    private var counter = 0

    // Here we make a blocking call
    fun makeRequest(): Int {
        Thread.sleep(2000L)
        counter += 1
        return counter
    }
}

然后我从 UI 线程调用这个函数:

fun getNumberThread(): Int {
    val myCallable = MyCallable(myRepository)
    val futureTask = FutureTask(myCallable)
    val myThread = Thread(futureTask)
    myThread.start()
    return futureTask.get()
}

问题是执行此操作时 UI 被阻塞。如何使用 Future 和 Callable 进行这样的操作而不阻塞应用程序的 UI?

android kotlin future java.util.concurrent completable-future
1个回答
0
投票

您可以使用

ListenableFuture
,这样您就可以附加完成侦听器,而不是使用阻塞
get()
调用。 https://developer.android.com/guide/background/asynchronous/listenablefuture

© www.soinside.com 2019 - 2024. All rights reserved.