Рассмотрим следующий фрагмент:
Looper.prepare();
handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
getLooper().quitSafely();
}
};
for(int i = 0; i < urls.size(); i++) {
useCaseProvider.get().execute(callback, handler, urls.get(i), threadPool);
}
Looper.loop();
//Continue processing the results of all the use cases after the
//loop has been asked to terminated via the handler
Немного фона: я делаю некоторую обработку в потоке пользовательского интерфейса, где мне нужно будет пинговать большое количество устройств и делать что-то с результатом. Мне нужно выполнить запросы параллельно, чтобы быть эффективными.
Вопрос: Если один из этих вариантов использования как-то выполнялся достаточно быстро и сделал обратный вызов, прежде чем я смог нанести удар Looper.loop(); было ли сообщение поставлено в очередь или просто потеряно? Обратные вызовы отправляются обратно в этот поток обработчиком, проводящим runnable в исходный поток.