Какие знаешь способы синхронизации локальных данных с сервером

«Какие знаешь способы синхронизации локальных данных с сервером» — вопрос из категории Базы данных, который задают на 24% собеседований Android Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

  1. Polling – периодические запросы к серверу (неэффективно, но просто).
    handler.postDelayed({ fetchUpdates() }, POLLING_INTERVAL)
  1. WebSockets – постоянное соединение для мгновенных обновлений.
    val okHttpClient = OkHttpClient()
    val request = Request.Builder().url("ws://example.com").build()
    val webSocket = okHttpClient.newWebSocket(request, MyWebSocketListener())
  1. Firebase Realtime Database – синхронизация в реальном времени через Google-инфраструктуру.

  2. SyncAdapter – системный механизм для фоновой синхронизации (устарел, заменён на WorkManager).

  3. WorkManager – гибкое планирование синхронизации с учётом условий (сеть, зарядка).

    val syncRequest = PeriodicWorkRequestBuilder<SyncWorker>(1, TimeUnit.HOURS).build()
    WorkManager.getInstance(context).enqueue(syncRequest)
  1. Ручная синхронизация – по действию пользователя (кнопка "Обновить") или при восстановлении соединения (BroadcastReceiver на CONNECTIVITY_CHANGE).

Оптимальный выбор зависит от частоты обновлений, автономности и ресурсов. Для редких обновлений – WorkManager, для чатов – WebSockets.