- Вопрос №1
Нужна необходимость синхронизировать данные с сервером при запуске приложения. Делать это нужно в фоне, желательно с низким приоритетом.
Я предполагаю, что для этой цели нужно будет создать сервис и запускать его из Application. Сервис будет пробовать отправить запрос, а в случае отсутствия интернет-соединения - ожидать его появления и снова делать попытку.
Или всё же лучше прямо из Activity это делать?
- Вопрос №2
Приложение будет общаться с сервером посредством сокетов, т.е. все события (новые сообщения, оповещения, обновление данных и т.д.) будут вещаться через socket-сервер.
Для этого, как я понимаю, нужно создать сервис, который будет всё время запущен на устройстве. Почитав немного в интернете о таком подходе, ставится понятно - это не есть хорошо как минимум по двум причинам: Android может убить этот сервис; такой сервис будет нагружать систему, в итоге получим расход батареи + понижение производительности.
Тут меня посетила мысль использоваться FCM. Вроде как есть возможность передавать любые данные. Вопрос вот в чём: действительно ли можно заменить собственный socket-сервер решением от Google? Есть ли минусы у FCM?
Все зависит от того, что юзер должен делать: сидеть и тупить в экран, ожидая окончания синхронизации, или же именно параллельно что-то делать. Если параллельно - то делай в сервисе, в фоне.
FCM передает за один пакет до 4 килобайт текста, не "слишком моментально", но при небольшой нагрузке (кол-ве запросов в секунду) - бесплатно.
Ну, а нагрузка на Андроид - так любые клиент-серверные системы работают точно также, мессенджеры, клиенты сайтов.... И у всех foreground сервисы, которые системой не убиваются.