代码之家  ›  专栏  ›  技术社区  ›  pgsandstrom

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

  •  6
  • pgsandstrom  · 技术社区  · 14 年前

    我有一个监听套接字的服务。当接收到某些输入时,创建一个活动。当接收到其他输入时,将终止此活动。有一段时间我一直在努力使服务通过AIDL与活动进行通信。( http://developer.android.com/guide/developing/tools/aidl.html 但这似乎没有效果。我认为AIDL只有在与之交谈的过程是服务时才有效,而不是在它是活动时?我想要一些关于如何解决我的问题的指导或建议。

    干杯,

    1 回复  |  直到 14 年前
        1
  •  9
  •   CommonsWare    14 年前

    我有一个服务,听 插座。当接收到某些输入时 它是创建一个活动。

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

    当接收到其他输入时, 终止此活动。

    我看到的唯一一个有效模式是当另一方挂断电话时,取消通话中的屏幕。如果您正在创建一个VoIP客户端,那么您建议的模式应该是OK,否则,请重新考虑让活动消失在使用它的用户中间。

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

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

    我想要一些指示或者 关于如何解决我的 问题。

    你还没有提供足够的关于沟通性质的信息来给你一个彻底的答案。服务到底想告诉活动什么?活动是否也尝试与服务通信?

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

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

    如果您的服务正在后台线程上执行其主要工作,那么您需要确保在UI线程上执行UI操作。这个 处理程序 这是一种方法。