0

我正在开发一个 android 服务,该服务为应用程序提供了 AIDL 接口,现在应用程序使用 AIDL 接口调用函数 GetData(),该函数在 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
4

2 回答 2

2

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

我认为这对你有帮助。

于 2013-04-18T05:26:20.437 回答
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();

`

于 2013-04-18T05:20:56.117 回答