Java Android蓝牙/异步AIDL/回调

Java Android蓝牙/异步AIDL/回调,java,android,ipc,aidl,Java,Android,Ipc,Aidl,假设我们有一个发射蓝牙数据的设备,其中生产者应用程序已绑定,以便在与生产者相同的系统映像上向消费者应用程序投射数据项的平均间隔。对于生产者和消费者的关系,我选择使用一个异步aidl来使用蓝牙数据,并使用回调aidl将有效负载返回给消费者。(AIDL理解)为清楚起见,消费者已在相同的包中声明了两个AIDL接口,因为生产者遵守AIDL通信规则。消费者应用程序将声明回调存根,并将其传递给通过调用bindService(..)创建的绑定服务以便在生产者的远程服务完成其数据处理时收到通知。在客户端获得第一

假设我们有一个发射蓝牙数据的设备,其中生产者应用程序已绑定,以便在与生产者相同的系统映像上向消费者应用程序投射数据项的平均间隔。对于生产者和消费者的关系,我选择使用一个异步aidl来使用蓝牙数据,并使用回调aidl将有效负载返回给消费者。(AIDL理解)为清楚起见,消费者已在相同的包中声明了两个AIDL接口,因为生产者遵守AIDL通信规则。消费者应用程序将声明回调存根,并将其传递给通过调用bindService(..)创建的绑定服务以便在生产者的远程服务完成其数据处理时收到通知。在客户端获得第一个有效负载后,我希望从服务中解除绑定,以构建实时图表;问题是,消费者应用程序在消费者解除与服务的绑定后的几秒钟内继续接收生产者远程服务发出的数据项。这会导致我的应用程序构造和破坏计算图,然后返回最后一个图

          final IUsageServiceCallBack.Stub callback = new 
        IUsageServiceCallBack.Stub() {
                         @Override
                         public void onResult(Bundle usageBundle) 
              throws RemoteException {
                             Log.i(TAG , "BLUETOOTH DATA" );
                             // Perform Logic 
                             // Unbind but onResult still called
                         }
                     };

是否有一个好的解决方案来处理这种情况。我曾想过添加标志,但这并不好

您在哪里使用
IUsageServiceCallBack.Stub callback
?你在哪里传递它?消费者应用程序将把回调的最终引用传递给它在生产者应用程序中已建立连接的绑定服务。这在问题BTW中进行了解释。查看服务,这并不重要,重要的部分是AIDL,它应该有那些
register
/
unregister
方法,因此在调用
unregister
之后,您将不会收到进一步的数据。您在哪里使用
IUsageServiceCallBack.Stub callback
?你在哪里传递它?消费者应用程序将把回调的最终引用传递给它在生产者应用程序中已建立连接的绑定服务。这在问题BTW中进行了解释。查看服务,这并不重要,重要的部分是AIDL,它应该有那些
register
/
unregister
方法,因此在调用
unregister
之后,您将不会收到进一步的数据