繁体   English   中英

在 android 中让 UI 线程等到服务完成

[英]Making the UI thread to wait untill the service is finished in android

大家好,我有一个问题,我想让 UI 线程等到服务完成,谁能告诉我如何实现这个?

一种解决方案:

  • 在您的 UI 活动中创建一个处理程序,以便正确地读取和写入变量(例如在 onCreate 函数中创建它)
  • 在 UI 活动中放置一个广播接收器
  • 当您的服务终止时,发送一条广播消息
  • 您的 UI 活动将使用广播接收器接收消息
  • 将您的指示发布给处理程序

教程关键词:

  • 广播接收器
  • 发送广播(意图)
  • 处理程序发布可运行

希望能帮助到你

我可以告诉你,你永远不应该让 UI 线程等待:

总而言之,保持 UI 线程畅通对应用程序 UI 的响应能力至关重要。

这来自无痛线程的 Android 开发人员页面,您应该完整阅读。 你到底想做什么?

我将假设您已经正确设置了与您的 Activity 通信的服务设置。

您可以使用Semaphore在服务执行时阻塞 UI 线程。 有很多方法可以做到这一点,但为了简单起见,这个Semaphore可以是实用程序 class 中的 static 字段。

public class UtilityClass {
   public static final Semaphore LOCK = new Semaphore(0);
}

在您的 UI 线程中,您可以执行以下操作: UtilityClass.LOCK.acquire()

在您的服务中,完成后您将释放锁: UtilityClass.LOCK.release()

请记住,可能需要进行更多检查以确保此方法中没有错误。 您将需要查看Semaphore文档。 例如,在发布许可证之前,您可能需要检查是否有零个availablePermits()

我认为这可以回答您的问题,但请注意,阻塞 UI 线程会导致应用程序无响应。 换句话说,这种方法不是最佳实践,应该避免。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM