Wiele aplikacji musi przesyłać dane w tle. W tym przewodniku znajdziesz informacje o dostępnych opcjach niezawodnego przesyłania danych w tle oraz przykłady ich implementacji.
Typowe scenariusze przesyłania danych w tle
W tej sekcji opisujemy typowe sytuacje, w których aplikacje muszą przesyłać dane na urządzenie lub z niego, i pomagamy wybrać odpowiednie narzędzie.
Wybierając interfejs API, weź pod uwagę te pytania:
- Czy przeniesienie zostało zainicjowane przez użytkownika?
- Czy istnieje interfejs API, który obsługuje ten transfer?
- Czy zadanie musi zostać wykonane natychmiast?
Opcja | Kiedy używać | Timing | Przykłady |
---|---|---|---|
Do planowania zadań trwających krócej niż 10 minut, które powinny być wykonywane, gdy aplikacja jest niewidoczna. |
Możliwość odroczenia: można też dostosować za pomocą ograniczeń Natychmiastowe: użyj
|
okresowe synchronizowanie danych z serwerem, Pobieranie lub przesyłanie multimediów w sieci zainicjowane w tle (nie przez użytkownika) |
|
Gdy przenoszenie danych jest inicjowane przez użytkownika i musisz informować go o postępach. |
Zainicjowane przez użytkownika (np.kliknięcie przycisku) – rozpoczyna się natychmiast. |
przesyłanie zdjęcia, pobieranie pliku; |
|
W przypadku krótkich, krytycznych zadań lub gdy WorkManager nie jest dostępny. Powiadomienie informuje użytkownika o postępach w przenoszeniu. |
Rozpoczyna się natychmiast |
|
|
Użyj go, jeśli istnieje dla danej operacji. Może to przynieść korzyści, takie jak zoptymalizowana wydajność i lepsza integracja z systemem. |
Różne |
Synchronizacja danych z połączonym urządzeniem |
Jeśli Twój scenariusz nie jest wymieniony w sekcji typowych scenariuszy, zapoznaj się z kolejnymi sekcjami, aby znaleźć interfejs API, który najlepiej pasuje do Twojego przypadku użycia. Prawdopodobnie odpowiednim rozwiązaniem będzie WorkManager.
Używanie typu zadania przenoszenia danych inicjowanego przez użytkownika
Jeśli aplikacja musi przesyłać dane na serwer zdalny, możesz użyć zadania przesyłania danych inicjowanego przez użytkownika. Ten typ pracy jest odpowiedni, jeśli spełnione są te warunki:
- Użytkownik rozpoczął przenoszenie danych.
- Musisz informować użytkownika o postępach w przenoszeniu danych.
- Przerwanie przenoszenia przez system pogarsza wrażenia użytkowników.
Jeśli któryś z tych warunków nie jest spełniony, użyj WorkManagera.
Na przykład aplikacja multimedialna może umożliwiać użytkownikom pobieranie albumów do odtwarzania lokalnego. Jeśli użytkownik chce pobrać playlistę i od razu ją odtworzyć, możesz użyć typu zadania przesyłania danych inicjowanego przez użytkownika. Z drugiej strony, jeśli użytkownik chce, aby pobrana playlista była okresowo aktualizowana w tle bez jego udziału, lepszym wyborem będzie WorkManager.
Więcej informacji, w tym o tworzeniu i uruchamianiu zadania przesyłania danych inicjowanego przez użytkownika, znajdziesz w dokumentacji zadań przesyłania danych inicjowanych przez użytkownika.
Używanie WorkManagera do przesyłania danych
W większości przypadków WorkManager jest najlepszym rozwiązaniem, gdy musisz zaplanować pracę. Pamiętaj, że zadania musisz zaprojektować tak, aby system mógł je przerwać lub odłożyć. Więcej informacji znajdziesz w dokumentacji WorkManagera.
Podczas korzystania z WorkManagera do przesyłania danych w tle warto pamiętać o tych kwestiach:
- Jeśli chcesz jak najszybciej wykonać pracę, możesz zaplanować przyspieszoną prośbę o wykonanie pracy. Ta opcja jest szczególnie przydatna, jeśli planujesz pracę w odpowiedzi na transmisję, dokładny alarm lub wiadomość FCM o wysokim priorytecie.
- Jeśli chcesz, aby praca była wykonywana okresowo, możesz zaplanować okresowe wykonywanie pracy. Okresowe żądanie wykonania pracy pozwala określić w przybliżeniu, jak często będzie wykonywana praca, ale nie gwarantuje konkretnej godziny. Dzięki temu system może planować żądania pracy z różnych aplikacji, aby zrównoważyć obciążenie urządzenia.
- Aby określić odpowiednie okoliczności uruchomienia zadania, musisz zdefiniować ograniczenia pracy. Jeśli na przykład aplikacja musi pobrać zasoby, które nie są pilne, możesz określić, że zadanie ma być wykonywane, gdy urządzenie jest ładowane i połączone z siecią bez limitu danych. WorkManager może wtedy uruchomić zadanie w momencie, w którym obciążenie systemu jest zrównoważone.
- WorkManager może bezpłatnie anulować zadanie i ponowić jego wykonanie w razie potrzeby. Na przykład użytkownik może wyłączyć urządzenie podczas wykonywania zadania. System może wtedy ponowić próbę wykonania zadania, gdy urządzenie będzie ponownie dostępne. Zaprojektuj i przetestuj przepływ pracy, aby upewnić się, że cykl anulowania i ponawiania działa prawidłowo.
- Długotrwałe procesy (usługa na pierwszym planie): WorkManager może obsługiwać zadania trwające dłużej niż 10 minut, tworząc usługę na pierwszym planie dla aplikacji. Oznacza to, że podlega ona tym samym ograniczeniom co usługa na pierwszym planie i zadania, w tym ograniczeniom dotyczącym uruchamiania w tle i limitom wykonywania (zadania trwające dłużej niż 10 minut zostaną ponownie zaplanowane przez system).
JobScheduler to alternatywna opcja planowania pracy w tle. W przeciwieństwie do WorkManagera wymaga więcej konfiguracji, ale daje dostęp do interfejsów API, które nie są obecnie dostępne w WorkManagerze, takich jak setPrefetch
, setUserInitiated
i getPendingJobReasons
.
Korzystanie z konkretnego interfejsu API
Jeśli jest dostępny konkretny interfejs API (np. menedżer urządzenia towarzyszącego), użyj go. W przeciwnym razie użyj connectedDevice
usługi na pierwszym planie.
prompta AI
Identyfikowanie interfejsów API przeznaczonych do konkretnych zastosowań
Ten prompt prosi o określone interfejsy API do zadań związanych z przesyłaniem danych.
I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?
Używanie bardziej szczegółowego typu usługi na pierwszym planie
Jeśli WorkManager i JobScheduler nie są odpowiednie dla danego zadania w tle, może być konieczne użycie usługi działającej na pierwszym planie.
Jak zawsze, gdy rozważasz użycie usługi na pierwszym planie, zastanów się, czy nie ma lepszego alternatywnego interfejsu API dostosowanego do Twojego przypadku użycia.
Używanie usługi działającej na pierwszym planie o krótkim czasie działania
Jeśli aplikacja musi wykonać krótkie, krytyczne zadanie, najlepszym rozwiązaniem może być shortService
usługa na pierwszym planieshortService
. Oto kilka sytuacji, w których shortService
usługa działająca na pierwszym planie może być odpowiednia:
- Użytkownik inicjuje działanie (np. synchronizację danych z serwerem), a Ty chcesz mieć pewność, że operacja zostanie zakończona, nawet jeśli użytkownik natychmiast przełączy aplikację w tryb tła.
- zapisywanie informacji w pamięci w trwałej pamięci masowej;
- szyfrowanie i odszyfrowywanie informacji;
Pełne informacje znajdziesz w shortService
dokumentacji.
Korzystanie z usługi na pierwszym planie na połączonym urządzeniu
Jeśli musisz przenieść dane na inne urządzenie lokalne, możesz użyć connectedDevice
usługi działającej na pierwszym planie. Oto kilka typowych sytuacji, w których może być to konieczne:
- komunikowanie się z urządzeniem Bluetooth, np. słuchawkami lub zegarkiem;
- przesyłanie danych na urządzenie podłączone lokalnie za pomocą połączenia USB, NFC lub lokalnego połączenia z internetem;
W takich sytuacjach możesz jednak użyć menedżera urządzeń towarzyszących, aby połączyć się z urządzeniem zamiast korzystać z usługi na pierwszym planie. Jak zawsze, jeśli w Twoim przypadku użycia dostępny jest interfejs API specjalnego przeznaczenia, zwykle jest to lepsze rozwiązanie niż korzystanie z usługi na pierwszym planie.
Korzystanie z nowej usługi działającej na pierwszym planie do przetwarzania multimediów
Jeśli musisz przetwarzać dane multimedialne, możesz użyć mediaProcessing
usługi działającej na pierwszym planie. Ten typ usługi jest dostępny, jeśli aplikacja jest kierowana na Androida 15 lub nowszego. Ten typ usługi jest odpowiedni np. wtedy, gdy aplikacja musi transkodować multimedia z jednego formatu na inny w celu odtwarzania. Więcej informacji znajdziesz w dokumentacji usługi na pierwszym planie do przetwarzania multimediów.
mediaProcessing
Dodatkowe materiały
- Wskazówki dotyczące przenoszenia danych inicjowanego przez użytkownika
- Omówienie usług działających na pierwszym planie