【问题标题】:using synchronous and async communication between Activity and Service on Android在 Android 上使用 Activity 和 Service 之间的同步和异步通信
【发布时间】:2011-08-30 16:12:05
【问题描述】:

我目前正在编写一个应用程序,它由一个服务和一个活动组成。该服务在后台运行,进行一些实时音频处理。如果用户想要获取有关正在运行的服务的一些信息或想要更改服务的设置,则活动将启动并绑定到服务。

目前我正在使用异步信使系统在服务和活动之间进行通信。例如,服务可以通过消息向活动发送一些结果,活动可以处理此消息并显示结果。这很好用,但是为每次通信编写消息传递内容是有压力的。而且它并不总是需要的。有时我只想询问服务是否设置了标志。如果我这样做是异步的,我必须向服务发送一条消息,询问标志的值,然后服务必须向活动发送一条消息以回答请求。

所以我想要一些可以同步访问服务的 getter 和 setter。这可以通过使用活页夹来完成,该活页夹也可以。

问题是,我有时需要同步通信来获取标志等的值,有时我需要异步通信来将结果从服务推送到活动。所以我需要的是一个活页夹和一个信使。但我不知道如何做到这一点,因为服务只能从 onBind() 方法返回一个对象,要么是 binder 对象,要么是 messenger 对象。

您有什么建议可以做到这一点,或者有什么其他方法来实现活动和服务之间的异步和同步通信?

提前致谢!

托比亚斯

【问题讨论】:

    标签: android


    【解决方案1】:

    如果您已经绑定到服务,您的活动可以为服务提供一个侦听器对象,然后服务将在事件发生时调用该对象。

    您只需要确保在从服务取消绑定之前取消注册该侦听器对象,并在活动被销毁之前完成这两项操作,这样您的服务就不会以对已失效活动的强引用结束。

    【讨论】:

      猜你喜欢
      • 2013-01-19
      • 1970-01-01
      • 2015-08-03
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 2012-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多