Mam pytanie dotyczące widżetów Androida, a zwłaszcza usług Androida. Oto, co chcę zrobić: na telefonie użytkownik powinien mieć możliwość dodania mojego widżetu do ekranu głównego. Widżet pobiera dane z sieci. Po przeczytaniu kilku tutoriali o tym dowiedziałem się, że najlepszym sposobem byłoby stworzenie usługi, która pobiera dane z sieci (gniazda TCP), a następnie aktualizuje widget w sposób ciągły. Odbywa się to za pomocą ScheduledExecutorService, która wykonuje Runnable w określonym przedziale czasu. Runnable łączy się z serwerem, pobiera dane i powinien zaktualizować widget).Android - zaktualizuj widżet do usługi za pomocą danych z sieci. Najlepsze podejście?
Mój problem polega na tym, że widżet nie musi być aktualizowany, gdy ekran jest wyłączony, więc usługa nie powinna działać z powodu wyczerpania baterii. Moje pytanie brzmi: jak to zrobić najlepiej?
znalazłem 2 podejścia, które bardziej lub mniej robić, co chcę:
Kiedy pierwsza instancja widget zostanie dodana do ekranu głównego, to zarejestrować Odbiornik radiowy, który odbiera ACTION_SCREEN_ON i ACTION_SCREEN_OFF zamierzone działanie z systemu operacyjnego Android. Jeśli ACTION_SCREEN_ON zostanie uruchomiony, uruchomi usługę Updater, w przeciwnym razie ją zatrzyma. Ale nie jestem pewien, czy to dobre podejście ze względu na czas życia odbiornika telewizyjnego.
W Runnable usługi Updater, która jest wykonywana okresowo przez ScheduledExecutorService i faktycznie robi rzeczy sieciowe, sprawdzam za pomocą PowerManager.isScreenOn(), jeśli ekran jest włączony. Jeśli tak, wykonuję kod sieci, w przeciwnym razie nie. Ale co się dzieje, gdy urządzenie jest w trybie gotowości? Czy ten kod jest wtedy wykonywany? A co z odpływem baterii?
Czy istnieje podejście "najlepszej praktyki" do tego, co chcę zrobić? Czytałem dużo o programie AlarmManager i jest to bardzo potężne narzędzie. Czy możesz zaplanować zadania w ten sposób, że są one wykonywane tylko wtedy, gdy wyświetlacz jest włączony?
Dzięki za pomoc.
Pozdrawiam NiThDi (na ekranie manipulacja widget i transmisje OFF)
Czy zastanawiałeś się nad [Google Cloud Messaging] (http://developer.android.com/google/gcm/index.html)? W ten sposób nie będziesz musiał odpytywać danych (nawet jeśli tylko urządzenie jest obudzone) i będziesz otrzymywać nowe dane tylko po zmianie. Dodatkowo uzyskasz korzyści z wyświetlania najnowszego fragmentu, gdy użytkownik przebudzi swoje urządzenie, bez żadnych początkowych opóźnień. – Audrius
Witam, dziękuję za szybką odpowiedź. Nie sądzę, że Google Cloud Messaging może robić, co chcę. Chodzi o to (aby się upewnić), że wspomniany serwer nie jest JEDNYM serwerem dla wszystkich użytkowników. Jest to aplikacja serwerowa działająca na ich komputerach. W rzeczywistości ta aplikacja jest pilotem, który łączy się z serwerem na komputerze w sieci LAN przez TCP/IP. – NiThDi