Aplikacje nie działają poprawnie w tle

1

Mam iPhone'a 5C z iOS 10 i mam kilka aplikacji, które powinny robić rzeczy w tle - szczególnie myślę o Google Photos, IFTTT i Android Wear, chociaż może być coś więcej, niż ja zauważyłem jeszcze - jak FB Messenger, Allo, Duo, Skype, Life360, Hiya itp.

Na przykład Zdjęcia Google mają automatycznie tworzyć kopie zapasowe moich zdjęć z aparatu, IFTTT powinien wykonywać działania na wszystkich nowo utworzonych przypomnieniach i zrzutach ekranu, a Android Wear powinien łączyć się z moim zegarkiem LG.

Na moim starym telefonie z Androidem po prostu działali, niezależnie od tego, czy aplikacja była uruchomiona, czy nie. Na iPhonie najwyraźniej musisz otworzyć aplikacje i pozostawić je uruchomione w tle, aby mogły się zachowywać.

Jednak dla każdej z trzech wymienionych przeze mnie list wydaje się działać tylko zgodnie z oczekiwaniami przez ograniczony czas (nie mam pojęcia, ile czasu), zanim przestaną działać. Na przykład dodam przypomnienie, zrób zdjęcie lub zrzut ekranu, a działania się nie zdarzają, mimo że IFTTT i Zdjęcia Google pokazują, że działają, jeśli przeglądam otwarte aplikacje.

Wybieram aplikację IFTTT lub Zdjęcia Google następnego dnia z listy otwartych aplikacji i natychmiast rozpoczynają się działania. To samo dotyczy mojego zegarka - będzie działał przez około pół dnia, a potem nagle odmówi połączenia, dopóki nie przejdę do aplikacji Android Wear na telefonie, a następnie natychmiast się połączy.

Odświeżanie aplikacji w tle jest włączone we wszystkich tych aplikacjach.

To pytanie wydaje się wskazywać, że te aplikacje powinny działać. Gdyby nie były popularnymi aplikacjami, obwiniłbym same aplikacje, ale wątpię, czy Google i IFTTT pozostawiłyby tak wielką dziurę w swoich produktach.

Czy jest inne ustawienie, na które muszę spojrzeć? Czy może jakieś ograniczenia procesora lub pamięci blokują te aplikacje, które zostaną rozwiązane za pomocą nowszego, mocniejszego telefonu?

Joe Enos
źródło

Odpowiedzi:

4

Aplikacje oznaczone jako „otwarte”, ale nie będące aplikacjami na pierwszym planie, są w stanie zawieszenia (opisane poniżej), z kilkoma wyjątkami. Więc aplikacje, które widzisz w przełączniku aplikacji, generalnie nic nie robią.

Na poziomie ogólnym są to stany, w których aplikacja może znajdować się w systemie iOS.

Nie działa : Aplikacja nie została uruchomiona lub działała, ale została zakończona przez system.

Nieaktywny : aplikacja działa na pierwszym planie, ale obecnie nie odbiera zdarzeń. (Może to być wykonanie innego kodu.) Aplikacja zwykle pozostaje w tym stanie tylko na krótko, ponieważ przechodzi w inny stan.

Aktywne : aplikacja działa na pierwszym planie i odbiera zdarzenia. Jest to normalny tryb dla aplikacji na pierwszym planie.

Tło : aplikacja działa w tle i wykonuje kod. Większość aplikacji przechodzi na krótko w ten stan w drodze do zawieszenia. Jednak aplikacja żądająca dodatkowego czasu wykonania może pozostać w tym stanie przez pewien czas. Ponadto aplikacja uruchamiana bezpośrednio w tle przechodzi w ten stan zamiast w stan nieaktywny. Aby uzyskać informacje na temat wykonywania kodu w tle, zobacz Wykonywanie w tle.

Zawieszony : aplikacja działa w tle, ale nie wykonuje kodu. System automatycznie przenosi aplikacje do tego stanu i nie powiadamia ich przedtem. Po zawieszeniu aplikacja pozostaje w pamięci, ale nie wykonuje żadnego kodu. Gdy wystąpi stan braku pamięci, system może wyczyścić zawieszone aplikacje bez powiadomienia, aby zwolnić miejsce dla aplikacji na pierwszym planie.

Wykonywanie w tle jest możliwe, jak wspomniano powyżej, ale tylko w określonych przypadkach użycia:

  • Aplikacje odtwarzające słyszalną treść dla użytkownika w tle, takie jak aplikacja do odtwarzania muzyki
  • Aplikacje, które nagrywają zawartość audio w tle
  • Aplikacje, które stale informują użytkowników o ich lokalizacji, takie jak aplikacja do nawigacji
  • Aplikacje obsługujące protokół Voice over Internet Protocol (VoIP)
  • Aplikacje, które muszą regularnie pobierać i przetwarzać nowe treści
  • Aplikacje, które otrzymują regularne aktualizacje z akcesoriów zewnętrznych

Jest jeszcze jeden przypadek, który jest pobierany w tle. Jest to jednak szczególny przypadek, ponieważ sama aplikacja jest nadal zawieszona, a proces pobierania przekazywany jest do systemu, na wypadek gdyby aplikacja musiała zostać zakończona przez system w celu odzyskania zasobów.

W przypadku Zdjęć Google aplikacja musi znajdować się w stanie Aktywnym, co oznacza, że ​​telefon jest odblokowany i znajduje się na pierwszym planie, aby znaleźć zdjęcia, które należy przesłać. (Po uzyskaniu ich listy może być w stanie przekazać rzeczywiste przesłane pliki do systemu w celu wykonania w tle, ale nie wiem, czy tak właśnie działa.)

W przypadku IFTTT prawdopodobnie musi być na pierwszym planie, aby wykonywać przepisy oparte na rzeczach specyficznych dla iOS (np. Przypomnienia). Może kwalifikować się do wykonania w tle w obszarze „Aplikacje, które informują użytkowników o ich lokalizacji przez cały czas”, ale może nie (nawet jeśli ma wyzwalacze oparte na lokalizacji).

Aplikacja Android Wear powinna kwalifikować się pod „Aplikacje, które regularnie otrzymują aktualizacje” do wykonania w tle. Ponieważ działa przez jakiś czas, wydaje się, że jest skonfigurowany do tego. W przypadku tej aplikacji zgaduję, że została ona zakończona przez system w celu odzyskania zasobów.

Nowsze urządzenie z większą ilością zasobów na pewno nie zaszkodzi sytuacji (szczególnie dla Androida Wear, założę się), ale niektóre z nich są po prostu związane ze sposobem działania iOS w celu oszczędzania zasobów systemowych (a w konsekwencji żywotności baterii).

tubedogg
źródło
1
Fantastyczna lektura, dziękuję. Bez jailbreaka zgaduję, że nie ma sposobu, aby zmanipulować to, aby zmusić aplikację do automatycznego wybierania na pierwszym planie co jakiś czas, więc sądzę, że po prostu będę miał na to oko i może poszukaj innych obejść. Dziękuję bardzo za szczegóły.
Joe Enos