启动Activity与之通信的服务的最佳方式

时间:2010-02-16 16:55:55

标签: android aidl

我有一个侦听套接字的服务。收到某些输入时,就是创建一个活动。当接收其他输入时,它将终止此活动。我已经努力让服务通过AIDL(http://developer.android.com/guide/developing/tools/aidl.html)与活动进行沟通,但这似乎没有效果。我认为AIDL仅在要与之交谈的流程是服务时才有效,而不是在它是一项活动时?我想知道如何解决我的问题的一些指示或建议。

干杯,

1 个答案:

答案 0 :(得分:9)

  

我有一个听取服务的服务   插座。收到某些输入时   它是创造一种活动。

请将此配置为可配置。服务不应该在非常异常情况下启动活动(例如,套接字是SIP连接,并且您正在创建VOIP客户端)。弹出一个活动会中断用户他们正在做的事情。

  

当接收其他输入时,它是   杀死这个活动。

我看到的唯一一个有效模式的场景是当对方挂断线路时解除通话中的屏幕。如果您正在创建一个VOIP客户端,您建议的模式应该没问题,但是否则请重新考虑让用户在使用它时消失该活动。

  

我认为AIDL只在有效时才有效   要谈的过程是   服务,而不是活动?

不,它也在反方向工作,但通常只有当活动是启动服务并绑定到它的活动时。更重要的是,AIDL仅用于跨进程通信。

  

我会喜欢某些方向或   关于如何解决我的建议   问题

您还没有真正提供有关通讯性质的足够信息,以便为您提供全面的答案。究竟是什么服务试图告诉活动?活动是否也尝试与服务进行通信?

从活动到服务的持续通信的推荐模式是使用本地绑定模式。您可以在SDK示例中找到相关示例,您也可以找到一个here

然后,该服务可以选择与客户进行通信:通过回调(例如,Smiljanić先生提供的答案中的Handler)或通过广播Intents。在回调的情况下,活动需要绑定到服务,以便访问API以提供回调对象。然后,该服务将保留该对象,并在关键事件期间调用其上的方法。

如果您的服务在后台线程上执行其主要工作,则需要确保在UI线程上执行UI操作。 Handler是一种方法。