我有一个监听套接字的服务。当接收到某些输入时,它是创建一个活动。当接收到其他输入时,就是杀死这个activity。我一直在努力让服务通过 AIDL(http://developer.android.com/guide/developing/tools/aidl.html)与活动通信,但这似乎无效。我认为 AIDL 仅在要与之交谈的进程是服务而不是活动时才有效?我会喜欢一些关于如何解决我的问题的方向或建议。
干杯,
我有一个监听套接字的服务。当接收到某些输入时,它是创建一个活动。当接收到其他输入时,就是杀死这个activity。我一直在努力让服务通过 AIDL(http://developer.android.com/guide/developing/tools/aidl.html)与活动通信,但这似乎无效。我认为 AIDL 仅在要与之交谈的进程是服务而不是活动时才有效?我会喜欢一些关于如何解决我的问题的方向或建议。
干杯,
我有一个监听套接字的服务。当接收到某些输入时,它是创建一个活动。
请使其可配置。服务不应该启动活动,除非在非常不寻常的情况下(例如,套接字是一个 SIP 连接并且您正在创建一个 VOIP 客户端)。弹出一个活动会打断用户正在做的任何事情。
当接收到其他输入时,就是杀死这个activity。
我见过的唯一一种有效模式是当对方挂断电话时关闭通话屏幕。如果您正在创建一个 VOIP 客户端,您建议的模式应该没问题,但否则,请重新考虑让活动在用户使用它的过程中消失。
我认为 AIDL 仅在要与之交谈的进程是服务而不是活动时才有效?
不,它也以相反的方向工作,但通常只有当活动是启动服务并绑定到它的活动时。更重要的是,AIDL 仅用于跨进程通信。
我会喜欢一些关于如何解决我的问题的方向或建议。
你没有真正提供足够的信息来说明沟通的性质,无法给你一个彻底的答案。究竟是什么服务试图告诉活动?活动是否也在尝试与服务进行通信?
从活动到服务的持续通信的推荐模式是使用本地绑定模式。您可以在您的 SDK 示例中找到一个这样的示例,您也可以在此处找到一个示例。
然后,该服务具有与客户端通信的选项:通过回调(例如,Handler
在 Smiljanić 先生提供的答案中)或通过广播Intents
。在回调的情况下,活动需要绑定到服务才能访问 API 以提供回调对象。然后,该服务将保留该对象并在关键事件期间对其调用方法。
如果您的服务在后台线程上执行其主要工作,您将需要确保您的 UI 操作在 UI 线程上执行。这Handler
是一种方法。