AIDL中的阻塞/同步函数调用

时间:2013-04-18 05:02:40

标签: android

我正在开发一个android服务,这个服务为应用程序提供了一个AIDL接口,现在应用程序调用函数GetData()使用AIDL接口,这个函数在Service中实现,它做了一些网络操作,连接到服务器并获取一些数据,这个网络事务发生在后台线程中,问题是我想函数GetData()不应该返回,直到网络操作完成,结果来自服务器而我想将它返回到GetData(),GetData函数立即返回并进行网络操作在后台线程中继续并行运行,如何避免这种情况,也无法在主线程中调用网络操作。我读过有关countDownlatch的信息,它是唯一可行的解​​决方案吗?

                        Service Main Thread

                            GetData
                                 GetDataFromServer-----------> in Background thread
      /*this is problem */  GetData returns;                         |
                                                                     |
                                                                     |
                                                              communication in progress
                                                                     |
                                                                     |
                                                                     |
      /*I want GetData should return here <-------------------transaction complete

2 个答案:

答案 0 :(得分:1)

创建一些接口并在类中实现该接口,并在网络响应将数据传递给该接口对象后将接口对象传递给该特定服务。

我认为这有助于你。

答案 1 :(得分:0)

你可以从AsyncTask调用startService。我可以在最近的地方应用程序中遇到需要谷歌地图数据的问题。enter code here

protected void getLocationAndUpdatePlaces(boolean updateWhenLocationChanges) {
// This isn't directly affecting the UI, so put it on a worker thread.
AsyncTask<Void, Void, Void> findLastLocationTask = new AsyncTask<Void, Void, Void>() {
  @Override
  protected Void doInBackground(Void... params) {
    // Find the last known location, specifying a required accuracy of within the min distance between updates
    // and a required latency of the minimum time required between updates.

  // start a service that require data from web.

  }
};
findLastLocationTask.execute();

`