Zależy to w dużej mierze od rodzaju potrzebnej synchronizacji.
Okresowy
Jeśli twoja aplikacja jest aplikacją wiadomości, która publikuje posty o określonej godzinie każdego dnia (powiedzmy o 7.45 każdego dnia), wtedy uruchamiasz okresowe zadanie w usłudze działającej w tle, powiedzmy o 8 rano.
np . : Kroplownik. Powiadamiają mnie raz dziennie (około 18:30). Myślę, że używają okresowego zadania.
Zdarzenie wywołane
Jeśli transfer danych jest wyzwalany przez działanie użytkownika, użyj usługi w tle lub AsyncTask do transferu danych.
np . : DropBox / Evernote. Synchronizują się podczas interakcji z aplikacją.
Chwilowy
Jeśli Twoja aplikacja obsługuje wiadomości błyskawiczne / wiadomości e-mail / nieregularne ważne aktualizacje, potrzebujesz powiadomień wypychanych, ponieważ chcesz natychmiast powiadomić użytkownika. W tym przypadku użyj GCM lub Parse. np .: czat WhatsApp / Google. Ponieważ wyraźnie wspomniałeś, że nie chcesz używać GCM, powiem, dlaczego powinieneś używać standardowego dostawcy powiadomień wypychanych zamiast pisać własne:
Powiadomienia push działają natychmiastowo - opóźnienie jest bardzo małe (rzędu sekund, rzadko minut). Jeśli miałbyś zaimplementować do tego własne rozwiązanie / bibliotekę - w naiwnym modelu sprawdzałbyś serwer co sekundę lub co 5 sekund lub minutę, aby sprawdzić status. Jest to bardzo nieefektywne, ponieważ zużywa procesor (a tym samym baterię), przepustowość telefonu komórkowego i obciążenie serwera. Jednak w GCM / Parse zawsze utrzymują otwarty port z serwerem (patrz tutaj ). Jest to standardowy i najbardziej wydajny sposób. Ponadto, jeśli 10 aplikacji korzysta z GCM, nie potrzebujesz 10 otwartych połączeń, potrzebujesz tylko jednego na urządzenie. I naprawdę nie chcesz opracowywać własnego rozwiązania, chyba że masz ważny powód / fundusze / czas, aby to zrobić.
Uwaga na temat adaptera synchronizacji : Adapter synchronizacji działa dobrze we wszystkich powyższych trzech przypadkach. Zaznacz opcję Uruchom adapter synchronizacji, a zobaczysz, że zależy to od GCM lub własnego mechanizmu (wyzwalacza zdarzenia lub niestandardowego rozwiązania), dostępności sieci (wyzwalacza zdarzenia) lub zdarzenia okresowego. Podsumowując, jest to dobra wygodna klasa do synchronizacji danych bez konieczności długiej listy inicjalizacji za każdym razem lub implementacji wszystkich powyższych przypadków w jednym miejscu.