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

pgs*_*rom 6 android aidl

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

干杯,

Com*_*are 9

我有一个侦听套接字的服务.收到某些输入时,就是创建一个活动.

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

当接收其他输入时,它将终止此活动.

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

我认为AIDL仅在要与之交谈的流程是服务时才有效,而不是在它是一项活动时?

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

我想知道如何解决我的问题的一些方向或建议.

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

从活动到服务的持续通信的推荐模式是使用本地绑定模式.您可以在SDK示例中找到示例,您也可以在此处找到.

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

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