Wprowadzenie do uruchamiania procesów w tle w systemie iOS
System iOS bardzo ściśle reguluje przetwarzanie w tle i oferuje trzy podejścia do jego wdrożenia:
- Rejestrowanie zadania w tle — jeśli aplikacja musi wykonać ważne zadanie, może poprosić system iOS o przerwanie zadania, gdy aplikacja przejdzie w tle. Na przykład aplikacja może wymagać zakończenia logowania użytkownika lub zakończenia pobierania dużego pliku.
- Zarejestruj się jako aplikacja niezbędna w tle — aplikacja może zarejestrować się jako określony typ aplikacji, która ma znane, specyficzne wymagania dotyczące obsługi w tle, takie jak Audio , VoIP , Zewnętrzne akcesorium , Newsstand i Lokalizacja . Te aplikacje są dozwolone uprawnienia do ciągłego przetwarzania w tle, o ile wykonują zadania, które znajdują się w parametrach zarejestrowanego typu aplikacji.
- Włącz Aktualizacje w tle — aplikacje mogą wyzwalać aktualizacje w tle za pomocą monitorowania regionów lub nasłuchiwanie znaczących zmian lokalizacji. Od systemu iOS 7 aplikacje mogą również rejestrować się w celu aktualizowania zawartości w tle przy użyciu funkcji Pobierania w tle lub powiadomień zdalnych .
Stany aplikacji i metody delegata aplikacji
Zanim zapoznamy się z kodem przetwarzania w tle w systemie iOS, musimy zrozumieć, jak tło wpływa na cykl życia aplikacji systemu iOS.
Cykl życia aplikacji systemu iOS to kolekcja stanów i metod aplikacji do przenoszenia między nimi. Aplikacja przechodzi między stanami na podstawie zachowania użytkownika i wymagań w tle aplikacji. Ruch przedstawiono na poniższym diagramie:
- Nie uruchomiono — aplikacja nie została jeszcze uruchomiona na urządzeniu.
- Running/Active — aplikacja znajduje się na ekranie i wykonuje kod na pierwszym planie.
- Nieaktywna — aplikacja jest przerywana przez przychodzące połączenie telefoniczne, tekst lub inne przerwy.
- W tle — aplikacja przechodzi w tle i kontynuuje wykonywanie kodu w tle.
- Zawieszone — jeśli aplikacja nie ma żadnego kodu do uruchomienia w tle lub jeśli cały kod został ukończony, aplikacja zostanie zawieszona przez system operacyjny. Proces zawieszonej aplikacji jest nadal aktywny, ale aplikacja nie może wykonać żadnego kodu w tym stanie.
- Wróć do not Running/Termination (Rzadko) — od czasu do czasu proces aplikacji zostanie zniszczony, a aplikacja powróci do stanu Nie uruchomiono . Dzieje się tak w sytuacjach z małą ilością pamięci lub jeśli użytkownik ręcznie kończy aplikację.
Od czasu wprowadzenia obsługi wielozadaniowej system iOS rzadko kończy bezczynne aplikacje, a zamiast tego utrzymuje swoje procesy zawieszone w pamięci. Utrzymanie procesu aplikacji przy życiu gwarantuje, że aplikacja zostanie uruchomiona szybko przy następnym uruchomieniu go przez użytkownika. Oznacza to również, że aplikacje mogą swobodnie przenosić się ze stanu Zawieszone z powrotem do stanu W tle bez rysowania na zasoby systemowe. System iOS 7 wykorzystuje tę funkcję za pomocą nowych interfejsów API, które umożliwiają aplikacjom wstrzymanie zadań w tle, gdy urządzenie przejdzie w stan uśpienia, zaktualizuje zawartość bezpośrednio z poziomu tła bez interakcji użytkownika i nie tylko. Omówimy nowe interfejsy API w technikach tworzenia w tle systemu iOS.
Metody cyklu życia aplikacji
Gdy aplikacja zmieni stan, system iOS powiadamia aplikację za pomocą metod zdarzeń w AppDelegate
klasie:
OnActivated
— Jest to nazywane pierwszym uruchomieniem aplikacji i za każdym razem, gdy aplikacja wraca na pierwszy plan. Jest to miejsce do umieszczenia kodu, który musi być uruchamiany za każdym razem, gdy aplikacja jest otwierana.OnResignActivation
— Jeśli użytkownik otrzyma przerwę, taką jak połączenie tekstowe lub telefoniczne, ta metoda zostanie wywołana, a aplikacja jest tymczasowo aktywowana. Jeśli użytkownik zaakceptuje połączenie telefoniczne, aplikacja zostanie wysłana w tle.DidEnterBackground
— Wywoływana, gdy aplikacja przechodzi w stan w tle, ta metoda daje aplikacji około pięciu sekund, aby przygotować się do ewentualnego zakończenia. Użyj tego czasu, aby zapisać dane użytkownika i zadania oraz usunąć poufne informacje z ekranu.WillEnterForeground
— Gdy użytkownik wróci do aplikacji w tle lub wstrzymanej i uruchomi ją na pierwszym planie,WillEnterForeground
zostanie wywołana. Jest to czas, aby przygotować aplikację do podjęcia pierwszego planu przez ponowne wypełnianie dowolnego stanu zapisanego podczas .DidEnterBackground
OnActivated
zostanie wywołana natychmiast po zakończeniu tej metody.WillTerminate
— Aplikacja jest zamykana, a jej proces jest niszczony. Ta metoda jest wywoływana tylko wtedy, gdy wielozadaniowość nie jest dostępna na urządzeniu lub w wersji systemu operacyjnego, jeśli pamięć jest niska, lub jeśli użytkownik ręcznie kończy aplikację w tle. Należy pamiętać, że wstrzymane aplikacje, które zostaną zakończone, nie będą wywoływać metodyWillTerminate
.
Na poniższym diagramie przedstawiono sposób dopasowania stanów aplikacji i metod cyklu życia:
Kontrolki użytkownika do obsługi w tle w systemie iOS
System iOS 7 wprowadził kilka funkcji, aby zapewnić użytkownikom większą kontrolę nad stanem w tle aplikacji. Zarówno przełącznik aplikacji, jak i ustawienie Odświeżanie aplikacji w tle mają wpływ na cykl życia aplikacji.
Przełącznik aplikacji
Przełącznik aplikacji to ważna funkcja sterowania wprowadzona w systemie iOS 7. Jest uruchamiany przez dwukrotne naciśnięcie przycisku Strona główna i pokazuje aplikacje, których procesy są aktywne:
Za pomocą przełącznika aplikacji użytkownicy mogą przewijać migawki wszystkich aplikacji w tle i wstrzymanych. Naciśnięcie aplikacji uruchamia ją na pierwszym planie. Przesuwanie w górę usuwa aplikację z tła, przerywając proces. Przyjrzymy się bliżej przełącznikowi aplikacji w pokazie cyklu życia aplikacji systemu iOS w następnej sekcji.
Ważne
Przełącznik aplikacji nie pokazuje różnicy między aplikacjami w tle i wstrzymanych.
Ustawienia odświeżania aplikacji w tle
System iOS 7 zwiększa kontrolę użytkownika nad cyklem życia aplikacji, umożliwiając użytkownikom rezygnację z pracy w tle dla aplikacji zarejestrowanych w celu przetwarzania w tle. Nie uniemożliwia to aplikacjom uruchamiania zadań w tle.
Użytkownicy mogą zmienić to ustawienie, przechodząc do Ustawienia > Ogólne > odświeżanie aplikacji w tle i edytując uprawnienia do tła dla wybranej aplikacji. Jeśli odświeżanie aplikacji w tle jest wyłączone, aplikacja zostanie zawieszona natychmiast po wejściu w tle i uniemożliwi wykonanie jakiegokolwiek przetwarzania w tle:
Deweloperzy mogą sprawdzić stan aplikacji odświeżania w tle za pomocą interfejsu BackgroundRefreshStatus
API. Na przykład zapoznaj się z przepisem Sprawdź ustawienie odświeżania w tle.
Omówiliśmy podstawy cyklu życia aplikacji systemu iOS oraz funkcje służące do kontrolowania cyklu życia aplikacji. Następnie zobaczmy, jak działa cykl życia aplikacji systemu iOS.