java – 在Android中等待多个回调


Java线程中,您可以在列表中包含一些线程,启动它们,并让主线程连接一个,然后另一个,在继续之前等待所有进程完成.

在其他模型中,我不确定你会怎么做.以RootTools 3.0 Command类为例.你创建了一个Command,它有三个方法,commandOutput,commandFinished,commandTerminated,虽然你可以使用回调在进程结束时做某事,但我不知道你将如何等待多个进程(例如,通过列出几个目录并总结文件大小).

我相信Android Asynctask会有类似的问题 – 你可以很容易地进行回调,但没有办法等待几个任务.除非我错过了什么?

最佳答案 您可以在正在执行的命令上调用wait().

虽然在执行此操作之前,您应该关闭您调用wait的命令的处理程序.您可以通过将RootTools.handlerEnabled设置为false或在每个单独的命令中使用构造函数并传入false来禁用该命令的处理程序来为每个命令执行此操作.

这很重要,因为如果使用了处理程序,那么它将尝试在您调用wait()的线程上调用回调方法,这将导致死锁.

当您为命令关闭处理程序并调用wait()时,该命令将在完成后调用notifyAll(),以便您的线程将恢复.

这方面的负面影响是,回调方法将不再在您正在处理的线程中完成,因此除非您实现处理程序或其他一些可接受的解决方案,否则您将无法使用这些回调方法执行任何UI工作.有了这个.

点赞