Я работаю над проектом, в котором очень важна быстрая реакция, и, в основном, то, что он делает, это получение текущего местоположения пользователя, получает кучу (может быть не больше хундриндов) локально хранимых объектов 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 пути к присоединяющейся фазе, которая является очень важной, поэтому я отказался от него
Я действительно ищу ближайший (с точки зрения маршрута маршрут) latlong. timelimit - это то, что мне, вероятно, действительно нужно будет добавить, но поскольку я скорее жду несколько секунд и получаю более близкое к нему местоположение, то я думаю, что мы можем смело предположить с целью вопроса о том, что не существует ограничения по времени – user2717954