在我的 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?
您可以使用
ListenableFuture
,这样您就可以附加完成侦听器,而不是使用阻塞 get()
调用。 https://developer.android.com/guide/background/asynchronous/listenablefuture