Я сталкивался с такой задачей много раз. Для себе решил использовать HaMeR (Handler, Message, Runnable). Вкратце в своих проектах делаю так: создаю Manager (который является наследником от Handler). При каждом запросе (к примеру запрос на загрузку картинки) создаю Thread в котором при окончании работы делаю что-то типа такого
handler_.sendMessage(handler_.obtainMessage(States.REQUEST_COMPLETED, Data));
А потом в Manager'e в методе handleMessage(Message msg) по свитчу решаю что делать дальше. Или обновить UI или сделать еще запрос (при этом запрос может быть уже другой)