Как правильно построить архитектуру клиент-сервер приложения?
Не смотря на то что сегодня появилось много новых удобных технологий связка Service+ContentProvider+CursorLoader мне нравится больше всего
https://dl.google.com/googleio/2010/android-develo...
Service можно заменить на что то привычно и готовое, не суть
Для реализации запросов мне нравится связка retrofit + gson
Также рекомендую посмотреть в сторону rxjava
Инициатор диалога сессии - всегда сервер вне зависимости от того, кто хочет передать данные. Если не было сети - мы сохраняем статус и сообщение для следующей попытки, НО всегда проверяем время жизни TOKEN'a: LIMIT.
Общий вид процесса:
time1
TOKEN: запрос к серверу на токен.
QUERY: отправка данных.
WORK: обработка данных
time2
IF (time2-time1>LIMIT) GOTO TOKEN 
ELSE GOTO QUERY