2012-06-21 15 views
5

Rozważam użycie stałego połączenia z "usługą w chmurze" z aplikacji na Androida. To działałoby cały czas w usłudze tła (lub coś podobnego).Najlepsza praktyka w przypadku trwałych połączeń mobilnych w systemie Android?

Myślę o użyciu gniazd internetowych lub XMPP, aby utrzymać połączenie, w zasadzie szuka lekkiego połączenia, które nie rozładuje baterii. I chce być w stanie przesyłać powiadomienia w czasie rzeczywistym do tego połączenia, więc okresowe pobieranie nie jest pożądane. Jestem świadomy C2DM i innych komercyjnych rozwiązań, ale zamierzam przetasować swój własny. Dlatego właśnie badam to gniazdo internetowe (lub inne lekkie połączenie). Więc jeśli pójdę tą drogą, jakie są najlepsze praktyki, o których powinienem wiedzieć?

myślę o rzeczach takich jak:

  1. jak zapobiec baterii z opróżniania,
  2. Jak obsługiwać zmiany adresu IP, itp?
+1

Warto czytać dokumentację systemu Android: http://developer.android.com/training/efficient-downloads/index.html – pawelzieba

+4

Musisz podzielić to na osobne pytania na Androida i iOS - te dwie są zupełnie inne (na iOS nie można po prostu obsługiwać tła). – Gruntcakes

+0

@MartinH Pytanie zaktualizowano, aby dotyczyć tylko Androida. –

Odpowiedz

10

To może nie być odpowiedź, której szukasz, ale myślę, że warto przemyśleć swoją architekturę.

Co można spodziewać się platformy mobilnej

  • Twój adres IP, aby zmienić losowo
  • fizycznego połączenia internetowego, aby zostać utracone przypadkowo
  • OS zdecydować twój nie robi nic użytecznego i zabijania Twój proces
  • Typ połączenia zmienia się losowo (z WIFI na 4G na 3G na krawędź), a tym samym Twój adres IP na zmianę

Zasadniczo Twoja aplikacja musi być w stanie obsłużyć utratę połączenia, ponieważ jest prawie zagwarantowana.

To powiedziawszy, jest całkowicie wykonalne w zależności od twojej definicji czasu rzeczywistego. Jeśli chcesz stale sprawdzać, czy nadal istnieje opłacalne połączenie, możesz ograniczyć opóźnienia do zakresu minut. Ale to rozładuje baterię i niewiele można z tym zrobić.

+4

Ponowne przemyślenie architektury nie jest złą odpowiedzią :-) To jest cały sens w zamieszczaniu pytania, tylko próba sprawdzenia tego pomysłu z innymi. Jeśli to tylko zły pomysł, to świetna informacja zwrotna. Dzięki. Wciąż jednak interesuję się najlepszymi praktykami, jeśli i tak się do tego należy. C2DM to robi, więc pytanie brzmi: jak to robią i jakie są ich najlepsze praktyki? Powyższe komentarze są pomocnymi rzeczami, na które należy zwrócić uwagę. –

1

Niektóre rzeczy po prostu nie pasują do siebie. To jest "powiadomień push w czasie rzeczywistym" i "zapobiec wyczerpaniu baterii". Z pewnością musisz tu zawrzeć kompromis.

Mogę tylko polecić wypróbowanie niektórych aplikacji na Androida, które korzystają z XMPP, aby poczuć, jak radzą sobie z trwałymi połączeniami, zmianami adresu IP i zużyciem baterii. Jeśli są one open-source, możesz również wyświetlić kod i uczyć się z niego. Yaxim, Project MAXS i Beem, aby wymienić tylko kilka. Może ty też spojrzysz na XEP-0286: XMPP on Mobile Devices

To znaczy, czy jesteś pewien, że chcesz odkryć nowe koło, gdy Google oferuje C2DM? Który jest zoptymalizowany dla tego przypadku użycia. Myślę, że ma to pewne opóźnienie, więc nie jest to miejsce "w czasie rzeczywistym". Ale znowu, albo skończysz z rozwiązaniem, które próbuje agresywnie ustanowić połączenie persjidalne i wyczerpuje baterię, albo będziesz musiał żyć z pewnym opóźnieniem (~ 0-30 minut).

+0

Świetny link o XMPP na urządzeniach mobilnych. Niektóre dobre wzorce projektowe opisane w tym dokumencie. Rzeczy takie jak kompresja, a jeśli musisz wysłać, to wyślij wszystko, co masz, ponieważ poziom mocy zostanie w tym momencie zwiększony, itp. –

+3

Jedynym powodem, dla którego szukam alternatyw dla C2DM firmy Google, jest to, że C2DM wymaga od użytkownika mieć konto Google na urządzeniu. Projektuję funkcję wypychania, która będzie produkowana i sprzedawana bankom. Konieczność wyjaśnienia im, że ich użytkownicy będą potrzebować kont Google, będzie nieco niezręczna. –

+1

Wiem, że to stare pytanie, ale zasady dotyczące tego zmieniły się nieco w przypadku przełącznika GCM. Nowsze urządzenia nie potrzebują już konta Google. "Korzysta z istniejącego połączenia dla usług Google. W przypadku urządzeń z systemem pre-3.0 wymaga to od użytkowników skonfigurowania konta Google na urządzeniach mobilnych. Konto Google nie jest wymagane na urządzeniach z Androidem 4.0.4 lub nowszym." - http://developer.android.com/google/gcm/gcm.html –

Powiązane problemy