嗨,我有一个问题,我想让UI线程等待,直到服务已经完成,任何人都可以告诉我如何实现这个?
答案 0 :(得分:1)
我可以告诉你,你永远不应该让UI线程等待:
总而言之,应用程序UI的响应能力对于保持UI线程畅通无阻至关重要。
那是来自Painless Threading上的Android开发者页面,您应该完整阅读。无论如何你真的想做什么?
答案 1 :(得分:1)
我将假设您已正确设置服务,以便与您的活动进行通信。
您可以使用Semaphore
在服务执行时阻止UI线程。有很多方法可以做到这一点,但为了简单起见,这个Semaphore
可能是实用程序类中的静态字段。
public class UtilityClass {
public static final Semaphore LOCK = new Semaphore(0);
}
在您的UI主题中,您可以执行以下操作:UtilityClass.LOCK.acquire()
在您的服务中,完成后您将释放锁定:UtilityClass.LOCK.release()
请记住,可能需要进行一些检查以确保此方法中没有错误。您需要查看Semaphore
文档。例如,在发布许可之前,您可能需要检查是否存在零availablePermits()
我认为这回答了你的问题,但请注意,UI线程上的阻止会导致应用无响应。换句话说,这种方法不是最佳实践,应该避免使用。
答案 2 :(得分:1)
其中一个解决方案:
教程的关键词:
希望有所帮助