2013-04-18 3 views
0

Я работаю над сервисом android, эта служба предоставляла интерфейс AIDL для приложений. Теперь приложение вызывает функцию GetData() с использованием интерфейса AIDL, эта функция реализована в Service, она выполняет некоторую работу в сети , подключиться к серверу и получить некоторые данные, эта сетевая транзакция происходит в фоновом потоке, проблема в том, что я хочу, чтобы функция GetData() не возвращалась до завершения сетевой операции, результат исходит от сервера, и я хочу вернуть его в GetData(), Функция GetData возвращается немедленно, и сетевая операция в фоновом потоке продолжает работать параллельно, как этого избежать, не может вызвать работу сети также в основном потоке. Я читал о countDownlatch, это только возможное решение?Вызов блокировки/синхронной функции в AIDL

     Service Main Thread 

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

ответ

0

вы можете позвонить StartService из AsyncTask.I может иметь ту же проблему в моем ближайшем месте приложения, которое нужно данные из карты Google. 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(); 

`

1

Создать некоторый интерфейс и реализовать этот интерфейс в своем классе и передать объект интерфейса для этой конкретной службы после пришел ответ из сети передачи данных в этом интерфейсе объекта.

Я думаю, что это поможет вам.

+0

Я думаю, что это не блокирование в природе, мне нужно блокирование/синхронное поведение – logonmanish

Смежные вопросы