Opcje zadania Przenoszenie danych w tle

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, oraz pomagamy wybrać odpowiednie narzędzie do danej sytuacji.

Wybierając interfejs API, weź pod uwagę te pytania:

  • Czy transfer został zainicjowany przez użytkownika?
  • Czy istnieje interfejs API, który obsługuje ten transfer?
  • Czy zadanie musi zostać wykonane natychmiast?
Opcja Kiedy używać Czas Przykłady

WorkManager

Do planowania zadań trwających krócej niż 10 minut, które mają być wykonywane, gdy aplikacja nie jest widoczna.

Odroczenie: można też dostosować za pomocą ograniczeń

Natychmiastowe: użyj tego parametru, setExpedited jeśli zadanie musi zostać wykonane natychmiast.

okresowa synchronizacja danych z serwerem,

pobieranie lub przesyłanie multimediów w sieci; inicjowane w tle (nie przez użytkownika);

Zadanie przenoszenia danych inicjowane przez użytkownika

Gdy przenoszenie danych jest inicjowane przez użytkownika i musisz informować go o jego postępach.

Zainicjowane przez użytkownika (np.kliknięcie przycisku) – rozpoczyna się natychmiast.

Przesyłanie zdjęcia, pobieranie pliku

Usługa działająca na pierwszym planie

Do krótkich, krytycznych zadań lub gdy nie można użyć WorkManagera. Powiadomienie informuje użytkownika o postępie przenoszenia.

Rozpoczyna się natychmiast

connectedDevice: synchronizacja danych z połączonym urządzeniem

shortService: przetwarzanie pliku trwa mniej niż 3 minuty

mediaProcessing: kodowanie lub dekodowanie pliku multimedialnego

Konkretny interfejs API

Użyj, jeśli istnieje dla danej operacji. Może przynieść korzyści takie jak zoptymalizowana wydajność i ulepszona integracja systemów.

Różne

Synchronizacja danych z połączonym urządzeniem

Jeśli Twój scenariusz nie jest wymieniony w sekcji Najczęstsze scenariusze, zapoznaj się z następującymi sekcjami, aby znaleźć interfejs API najbardziej odpowiedni do Twojego przypadku użycia. Prawdopodobnie WorkManager będzie odpowiedni.

Korzystanie z typu zadania przesyłania danych inicjowanego przez użytkownika

Jeśli Twoja aplikacja musi przesłać dane na zdalny serwer, możesz użyć zadania przesyłania danych inicjowanego przez użytkownika. Ten typ pracy jest odpowiedni, jeśli:

  • Użytkownik rozpoczął przenoszenie danych.
  • Musisz informować użytkownika o postępie przesyłania danych.
  • Przerwanie transferu przez system może negatywnie wpłynąć na wrażenia użytkownika.

Jeśli którykolwiek z tych warunków nie jest spełniony, użyj zamiast tego WorkManagera.

Na przykład aplikacja multimedialna może umożliwiać użytkownikom pobieranie albumów w celu odtwarzania lokalnie. Jeśli użytkownik chce pobrać playlistę i od razu ją odtworzyć, możesz użyć zadania przesyłania danych inicjowanego przez użytkownika. Jeśli natomiast 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 zadań przesyłania danych inicjowanych przez użytkownika, znajdziesz w dokumentacji na temat zadań przesyłania danych inicjowanych przez użytkownika.

Przenoszenie danych za pomocą WorkManagera

W większości przypadków najlepszym rozwiązaniem jest użycie WorkManagera. Pamiętaj, że zadania muszą być zaprojektowane w taki sposób, aby system mógł je przerwać lub odroczyć. Więcej informacji znajdziesz w dokumentacji WorkManagera.

Oto kilka kwestii, o których należy pamiętać, gdy używasz WorkManagera do przesyłania danych w tle:

  • Jeśli chcesz wykonać zadanie jak najszybciej, możesz zaplanować przyspieszone zgłoszenie. Ta opcja jest szczególnie przydatna, jeśli planujesz pracę w odpowiedzi na transmisję, alarm o określonym czasie lub wiadomość FCM o wysokiej priorytecie.
  • Jeśli chcesz, aby zadanie było wykonywane okresowo, możesz zaplanować jego okresowe wykonywanie. Prośba o okresowe wykonywanie pracy pozwala określić przybliżoną częstotliwość wykonywania pracy, ale nie gwarantuje określonego czasu. Dzięki temu system może zaplanować zadania z różnych aplikacji, aby równomiernie rozłożyć obciążenie na urządzeniu.
  • Aby określić odpowiednie okoliczności uruchomienia zadania, musisz zdefiniować ograniczenia pracy. Jeśli na przykład aplikacja musi pobrać zasoby niepilne, możesz określić, że zadanie powinno być wykonywane, gdy urządzenie jest ładowane i połączone z siecią bez limitu. WorkManager może następnie uruchomić zadanie w takim czasie, aby zrównoważyć obciążenie systemu.
  • WorkManager może anulować zadanie i w razie potrzeby wykonać je ponownie. Użytkownik może na przykład wyłączyć urządzenie podczas wykonywania zadania. System może wtedy ponownie je uruchomić, gdy urządzenie będzie dostępne. Zaprojektuj i przetestuj przepływ pracy, aby upewnić się, że cykl anulowania i ponownego próbowania działa prawidłowo.
  • Długotrwałe zadania (usługi na pierwszym planie): WorkManager może obsługiwać zadania, które trwają dłużej niż 10 minut, tworząc dla aplikacji usługę na pierwszym planie. Oznacza to, że podlega ona tym samym ograniczeniom co usługi i zadania na pierwszym planie, w tym ograniczeniom dotyczącym uruchamiania z tła oraz limitom wykonania (system przeplanuje zadania, które trwają dłużej niż 10 minut).

JobScheduler to alternatywna opcja planowania pracy w tle. W odróżnieniu od WorkManagera wymaga ona więcej konfiguracji, ale za to masz dostęp do interfejsów API, które nie są obecnie dostępne w WorkManagerze, takich jak setPrefetch, setUserInitiatedgetPendingJobReasons.

Korzystanie z konkretnego interfejsu API

Użyj konkretnego interfejsu API, jeśli jest dostępny (np. menedżera urządzenia towarzyszącego); w przeciwnym razie użyj connectedDevice usługi na pierwszym planie.

Identyfikowanie interfejsów API do określonych zastosowań

To prompt prosi o określone interfejsy API do zadań związanych z przenoszeniem danych.


I want to transfer data from an Android mobile device to [device_type]. Is there a specific API available?

Korzystanie z promptów AI

Prompty AI są przeznaczone do używania w Gemini w Android Studio (wymagana najnowsza wersja Canary).

Więcej informacji o Gemini w Studio znajdziesz tutaj: https://developer.android.com/studio/preview/gemini

Użyj bardziej szczegółowego typu usługi na pierwszym planie

Jeśli WorkManager i JobScheduler nie są odpowiednie do danego zadania wykonywanego w tle, konieczne może być użycie usługi na pierwszym planie.

Podobnie jak w przypadku innych usług, przed użyciem usługi na pierwszym planie zastanów się, czy nie ma lepszego alternatywnego interfejsu API dostosowanego do Twojego przypadku użycia.

Krótka usługa działająca na pierwszym planie

Jeśli Twoja aplikacja musi wykonać krótkie, ale krytyczne zadanie, najlepszym rozwiązaniem może być shortService usługa na pierwszym planie. Oto kilka sytuacji, w których shortServiceusługa działająca na pierwszym planie może być odpowiednia:

  • Użytkownik inicjuje działanie (np. synchronizację danych z serwerem) i chcesz mieć pewność, że operacja zostanie ukończona, nawet jeśli użytkownik natychmiast przeniesie aplikację na drugi plan.
  • Zapisywanie informacji z pamięci podręcznej w pamięci trwałej.
  • szyfrowanie i odszyfrowywanie informacji.

Pełne informacje znajdziesz w dokumentacji shortService.

Korzystanie z usługi na pierwszym planie na połączonym urządzeniu

Jeśli chcesz przenieść dane na inne urządzenie lokalne, możesz użyć connectedDevice usługi 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 połączone lokalnie przez USB, NFC lub internet

W takich sytuacjach możesz jednak użyć menedżera urządzenia towarzyszącego, aby połączyć się z urządzeniem, zamiast korzystać z usługi na pierwszym planie. Jak zawsze, jeśli w przypadku Twojego przypadku użycia dostępny jest interfejs API do specjalnego zastosowania, jest to zwykle lepszy wybór niż korzystanie z usługi na pierwszym planie.

Korzystanie z nowego procesu przetwarzania multimediów na pierwszym planie

Jeśli musisz przetwarzać dane multimedialne, możesz użyć usługi na pierwszym planie mediaProcessing. Ten typ usługi jest dostępny, jeśli Twoja aplikacja jest kierowana na Androida 15 lub nowszego. Ten typ usługi jest odpowiedni, jeśli aplikacja musi przekonwertować multimedia z jednego formatu na inny, aby można je było odtworzyć. Więcej informacji znajdziesz w dokumentacji usługi przetwarzania multimediów na pierwszym planie.

Dodatkowe materiały