Który delegat jest odpowiedni do wdrożenia, gdy aplikacja budzi się z tła i chcesz, aby była przygotowana do działania?
applicationWillEnterForeground vs. applicationDidBecomeActive - Jaka jest różnica?
Który delegat jest odpowiedni do wdrożenia, gdy aplikacja będzie spać i chcesz przygotować ją do czyszczenia i zapisywania danych?
applicationWillResignActive vs. applicationDidEnterBackground - Jaka jest różnica?
Zauważyłem również, że applicationWillResignActive jest wywoływany, gdy przychodzi SMS lub połączenie przychodzące, ale użytkownik decyduje się kliknąć OK i kontynuować. W tych przypadkach nie chcę, aby moja aplikacja podejmowała jakiekolwiek działania. Chcę tylko, aby działało bez pośredniego czyszczenia, ponieważ użytkownik nie zamknął aplikacji. Myślę więc, że bardziej sensowne jest wykonywanie prac związanych z czyszczeniem tylko w applicationDidEnterBackground.
Byłbym wdzięczny za Twój wkład w najlepsze praktyki, które należy zastosować przy wyborze delegatów, którzy mają się wdrożyć w celu przebudzenia i pójścia spać, a także rozważenia takich wydarzeń, jak przerwanie przez SMS / połączenia.
Dzięki
-applicationWillEnterForeground:
nie zostanie wywołany, tylko-applicationDidEnterBackground:
(załóżmy, że iOS nie uważa, że jest to ponowne uruchomienie).applicationWillEnterForeground:
będzie wywoływane za każdym razem od tła do pierwszego planu ?! Nie mogę znaleźć sprawy, która NIE zostanie nazwana BEZapplicationDidBecomeActive
później.Zarządzanie cyklem życia aplikacji jest pomocne w przypadku pytań. Aby uzyskać szybką koncepcję, możesz zobaczyć Ryciny w tym dokumencie. Możesz także przeczytać komentarz z kodu wygenerowanego przez Kreatora XCode. Wymienione w następujący sposób:
Bardziej szczegółowe objaśnienia znajdują się w oficjalnym dokumencie dotyczącym UIApplicationDelegate
źródło
Nadal byłem trochę zdezorientowany odpowiedzią Dano, więc zrobiłem mały test, aby uzyskać przepływ zdarzeń w niektórych scenariuszach w celach informacyjnych, ale może być również przydatny dla ciebie. Dotyczy to aplikacji, których NIE używają
UIApplicationExitsOnSuspend
w swojej info.plist. Przeprowadzono to na symulatorze iOS 8 + potwierdzonym na urządzeniu z systemem iOS 7. Proszę wybaczyć nazwy modułu obsługi zdarzeń Xamarin. Są bardzo podobne.Tak,
DidEnterBackground
jest wywoływany dwukrotnie na urządzeniu z systemem iOS7. Za każdym razem stanem UIApplication jest Tło. Jednak symulator iOS 8 tego nie robi. To wymaga przetestowania na urządzeniu z systemem iOS 8. Zaktualizuję swoją odpowiedź, kiedy ją złapię, lub ktoś inny może potwierdzić.źródło
applicationWillEnterForeground
jest nazywany:przy ponownym uruchomieniu aplikacji (przechodzi z tła na pierwszy plan) Ta metoda nie jest wywoływana, gdy aplikacja uruchamia się po raz pierwszy, tj. kiedy
applicationDidFinishLaunch
jest wywoływana, ale tylko gdy pochodzi z tłaapplicationDidBecomeActive
applicationDidBecomeActive
jest nazywanypo pierwszym uruchomieniu aplikacji
didFinishLaunching
po,applicationWillEnterForeground
jeśli nie ma adresu URL do obsługi. poapplication:handleOpenURL:
jest nazywany. po,applicationWillResignActive
jeśli użytkownik ignoruje zakłócenia, takie jak połączenie telefoniczne lub SMS. po zniknięciu alertView w dowolnym miejscu z aplikacjiźródło
applicationWillResignActive jest wywoływany, gdy system prosi o uprawnienia. (w iOS 10). Na wypadek, gdyby ktoś wpadł w takie same kłopoty jak ja ...
źródło
W iOS 8+ istnieje subtelna, ale ważna różnica w podejmowaniu połączeń telefonicznych.
W systemie iOS 7, jeśli użytkownik odbierze telefon, wywoływane są zarówno applicationWillResignActive: jak i applicationDidEnterBackground: Ale w iOS 8+ wywoływana jest tylko aplikacja WillResignActive:
źródło
W systemie iOS 13+ zostaną wykonane następujące metody:
źródło