Java Android双向服务通信

Java Android双向服务通信,java,android,android-activity,service,Java,Android,Android Activity,Service,我有一个活动和一个本地绑定服务。我已经启动了绑定服务并运行良好,因此我可以通过服务器/绑定器界面上的函数处理从客户端到服务器的通信 但是,我需要双向通信,服务在某个时候需要通知活动(和用户)发生了什么,并且需要等待用户操作才能继续。换句话说,我需要服务器对客户端的调用是同步的或阻塞的。也就是说,当服务调用函数时,它会将一些参数传递给客户端,这将触发一个AlertDialog供用户使用,它们的选项将确定发送回服务的返回状态代码。在这一点之前,我希望服务停止并等待,直到它收到响应,这将决定它从那里做

我有一个活动和一个本地绑定服务。我已经启动了绑定服务并运行良好,因此我可以通过服务器/绑定器界面上的函数处理从客户端到服务器的通信

但是,我需要双向通信,服务在某个时候需要通知活动(和用户)发生了什么,并且需要等待用户操作才能继续。换句话说,我需要服务器对客户端的调用是同步的或阻塞的。也就是说,当服务调用函数时,它会将一些参数传递给客户端,这将触发一个AlertDialog供用户使用,它们的选项将确定发送回服务的返回状态代码。在这一点之前,我希望服务停止并等待,直到它收到响应,这将决定它从那里做什么(服务继续运行,服务关闭等)

那么安卓有没有办法做到这一点呢?我需要获取对我的活动的引用,它还需要公开这些阻塞方法,以便我可以从服务调用它们,然后等待响应。我已经为我的客户活动提供了一个接口,但我正在努力解决如何将其应用到服务中的问题。我不想使用序列化并将引用添加为额外的意图,因为客户机和服务都有许多我不想序列化的成员

谢谢

  • 您可以使用将信息从服务发送到活动
  • 在Activity类中对
    startService()
    的每次调用都只调用服务类的方法,所以您可以在Intent内部向它发送消息
  • 用于进行您自己的信息传输

  • 在这种情况下,2实际上不可行,因为我需要序列化对我的活动及其包含的每个对象成员的引用。我已经在使用3来与服务进行通信,我不确定将活动也作为服务进行通信是否有意义,所以我有两个服务进行通信,这可能吗?1可能是我目前看到的最可行的选项,实际上是遇到了这个解决方案:您可以将您的活动放入
    Intent
    中,就像在接口实现中一样。通过这种方式,您可以将活动引用放入
    startService()
    。这似乎很有希望,但它似乎要求对象可序列化,我不想这样做,因为它包含无法序列化的对象(WifiManager)。序列化需要以字符串形式保存,但无意中不需要这样做。试一下。我试过了,即使没有使用“putSerializable”,我也使用了putExtras,但它仍然因为缺少Serializable而抛出一个错误。你有“绑定本地服务”对吗?然后将回调接口传递给服务,它可以稍后调用该接口的某些方法请更具体!如何将接口传递给服务?作为一个可序列化的额外目的?如果是这样的话,那么我们已经对最后一个问题进行了讨论,这不是一个解决方案不,没有额外的,只是传递一个你的界面的参考。你仍然不是很具体,具体,我的意思是,请发布一些代码。我在哪里传递此引用,我无法访问构造函数。请阅读以下内容:您是否看到客户端的
    /**方法*/
    和您的活动可以调用的一个方法:
    public int getRandomNumber()
    ?然后添加另一个名为
    public void registerCallback(MyCallback callback)
    的方法,并从活动中调用它