2014-10-17 3 views
1

Я работаю над проектом, в котором очень важна быстрая реакция, и, в основном, то, что он делает, это получение текущего местоположения пользователя, получает кучу (может быть не больше хундриндов) локально хранимых объектов LatLng и запрашивает google web api для маршрутов.Android - правильный способ отправить много запросов

Мой вопрос - Какова будет 1) правильный способ сделать это, и 2) не принимают возрастов, чтобы закончить (при условии приличного сетевое соединение)

Прямо сейчас я взял путь - создать поток для каждый из запросов и обновить некоторые структуры данных, когда все нити завершения, продолжить оценки

это пояснит мой код:

private class RetrieveTracks extends AsyncTask<Void, Void, Data> { 

    private Data data; 

    @Override 
    protected Data doInBackground(Void... params) { 
     data = new Data(); 
     List<Thread> threads = new ArrayList<Thread>(); 
     for (LatLng lat : lats) { //lats is some collection with the LatLng objects I got 
       Thread thread = new Thread(new DirectionsFinder(lat, data, currentLocation)); 
       threads.add(thread); 
       thread.start(); 
     } 
     for (Thread thread : threads) { 
      try { 
       thread.join(); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 
     return data; 
    } 
    @Override 
    protected void onPostExecute(Data data) { 
     //update map with Data 
    } 
} 

public class DirectionsFinder implements Runnable { 

    private LatLng lat; 
    private Data data; 
    private LatLng curLoc; 


    public DirectionsFinder(Latlng lat, Data data, LatLng curLoc) { 
    this.lat = lat; 
    this.data = data; 
    this.curLoc = curLoc; 
    } 

    @Override 
    public void run() { 
     //send GET request to google web api and get the directions 
     synchronized (data) { 
      //update data 
     } 
    } 
    } 

также побочный вопрос, который я получил - в некоторых случаях я мог бы получить в середине от выполнения достаточно данных, чтобы я больше не был ed, чтобы получить информацию, есть ли способ «вырваться» из резерва работающих потоков?

Сначала я пытался использовать отзывной и FutureTask за то, что я пытаюсь сделать, но coulnd't найти CONVINIENT пути к присоединяющейся фазе, которая является очень важной, поэтому я отказался от него

ответ

0

Я бы Предположите, что вы в идеале хотите отклика от Google на всех latlongs перед продолжением после извлечения трека? Ваш сценарий звучит типично для курьера, у которого есть 10 пакетов для доставки по городу и хочет определить наиболее эффективный план вождения для доставки их всех. Затем попытка расчета маршрутов для всех пунктов назначения индивидуально помогает в расчете. Каждый звонок в Google приводит к тому, что в конечном итоге получает направление для одной поездки, а несколько запросов складываются в общем времени отклика. Возможно, вам нужно будет определить какое-то временное ограничение на время ожидания каждого ответа. Я не уверен, готовы ли вы отказаться или повторить медленный ответный запрос. Если вы находитесь в мобильной ситуации с устройством, использующим приложение, вы, возможно, не сможете обеспечить достойное время отклика для всех запросов. Это не окончательный ответ, но ваш ответ может помочь сообществу придумать более точный совет.

+0

Я действительно ищу ближайший (с точки зрения маршрута маршрут) latlong. timelimit - это то, что мне, вероятно, действительно нужно будет добавить, но поскольку я скорее жду несколько секунд и получаю более близкое к нему местоположение, то я думаю, что мы можем смело предположить с целью вопроса о том, что не существует ограничения по времени – user2717954

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