2012-12-23 37 views
6

我有一项通过AIDL与其他服务进行通信的服务。我希望该服务受我应用程序中的活动约束。该服务可以定义两个活页夹\界面吗?我尝试过使用信使与活动进行交流,重写“onBind”方法,以便根据其获取的意图(一个用于其他服务,一个用于活动)返回不同的活页夹。可以通过android服务提供两个接口进行通信吗?

但是当活动(使用相同的绑定器)从服务中解除绑定时,我有一个错误“myService泄漏了ServiceConnection ...最初绑定在这里”,我相信这是关于服务使用的绑定与其他服务进行沟通。
如果服务不能使用两个接口,我如何实现活动和服务之间的通信?

谢谢你, -Liron

回答

0

AIDL和Messenger用于IPC与其他应用程序/进程。从Android API Guide

注意:使用AIDL是仅当您允许来自不同应用的客户端访问您的IPC服务,并要处理你的多线程服务。如果你不需要在不同的应用程序间执行并发IPC,你应该通过实现一个Binder来创建你的接口,或者,如果你想执行IPC,但不需要处理多线程,可以使用Messenger来实现你的接口。无论如何,确保您在实施AIDL之前了解绑定服务。

如果您的活动与服务处于同一进程中,您只需要扩展活页夹。

扩展粘合剂类

如果您的服务是私人自己的应用程序,并在同一个进程中的客户端(这是常见的)运行时,你应该通过延长活页夹创建 接口并从onBind()返回它的实例 。客户端收到活页夹并可以使用它来直接访问活页夹 实施或甚至服务中的公共方法。当您的服务仅仅是您自己的 应用程序的后台工作人员时,这是首选技术 。你不会创建你的界面的唯一原因是这种方式是因为你的服务被其他应用程序或跨越不同的进程使用。

此图形关于绑定的服务生命周期可以与你是如何结合帮助/解绑定(http://developer.android.com/guide/components/bound-services.html#Lifecycle):

enter image description here

相关问题