Czy jest wywoływana przed w aplikacji na iOS? Wiem, że applicationWillTerminate
nie zawsze jest wywoływane (wielozadaniowość) - ale kiedy jest wywoływane, czy ZAWSZE jest nazywane najpierw? Nie chcę niepotrzebnie duplikować kodu, dodając go do wersji applicationWillTerminate
, jeśli jest już dołączony do applicationDidEnterBackground
, dla aplikacji obsługującej wielozadaniowość.Czy applicationDidEnterBackground ZAWSZE zostało wywołane przed applicationWillTerminate?
Odpowiedz
w iOS 4.0 i nowszym applicationDidEnterBackground
jest wywoływane zamiast applicationWillTerminate
, więc nie trzeba wywoływać obu tych urządzeń. Oto część docs Apple:
Dyskusja
w iOS 4.0 i później, ta metoda jest wywoływana zamiast applicationWillTerminate: metoda, kiedy użytkownik odchodzi aplikację który wspiera realizację tła . Tej metody należy użyć do udostępnienia zasobów udostępnionych, , zapisania danych użytkownika, unieważnienia liczników czasu i zapisania wystarczającej informacji o stanie aplikacji, aby przywrócić swoją aplikację do stanu w przypadku jej późniejszego zakończenia. Należy także wyłączyć aktualizacje interfejsu użytkownika aplikacji i unikać korzystania z niektórych typów współdzielonych zasobów systemowych (takich jak baza danych użytkownika bazy danych). Konieczne jest także unikanie korzystania z OpenGL ES na tle .
Twoja implementacja tej metody ma około pięciu sekund, aby wykonać dowolne zadania i wrócić. Jeśli potrzebujesz dodatkowego czasu na wykonanie ostatecznych zadań, możesz poprosić o dodatkowy czas wykonania z systemu , wywołując metodę beginBackgroundTaskWithExpirationHandler :. W praktyce powinieneś jak najszybciej powrócić z applicationDidEnterBackground: as . Jeśli metoda nie powróci przed upływem czasu , twoja aplikacja zostanie zakończona i oczyszczona z pamięci.
Należy wykonać wszystkie zadania związane z dostosowaniem interfejsu użytkownika przed zakończeniem tej metody, ale inne zadania (takie jak zapisanie stanu) powinny zostać przeniesione do kolejki równoczesnej wysyłki lub wątku dodatkowego w razie potrzeby. Ponieważ jest prawdopodobne, że jakiekolwiek zadania w tle będą uruchamiane w aplikacji applicationDidEnterBackground: nie będą działać, dopóki ta metoda nie zostanie zakończona, należy przed wykonaniem tych zadań poprosić o dodatkowy czas wykonania w tle przed wykonaniem . Innymi słowy, najpierw zadzwoń pod numer beginBackgroundTaskWithExpirationHandler: a następnie uruchom zadanie w kolejce wywołania lub wątku dodatkowym .
Aplikacja również księguje powiadomienie UIApplicationDidEnterBackgroundNotification wokół jednocześnie wywołuje tę metodę, aby dać zainteresowanym obiektom szansę reagują na przejściu.
Aby uzyskać więcej informacji o tym, jak przejść z wdziękiem na tło , oraz aby uzyskać informacje na temat uruchamiania zadań w tle o godzinie zakończenia , zobacz Podręcznik programowania aplikacji iOS.
Mam nadzieję, że to pomoże ci rozwiązać problem. Adrian
Oto link do notatki technicznej, która jest dostępna w sekcji dla programistów. Zajmuje się tworzeniem sieci i wielozadaniowości. Rzeczywista metoda zastosowana w tym dokumencie dotyczy tylko applicationDidEnterBackground
, a ponieważ iOS 5 mają system o nazwie watchdog, który kończy aplikację, jeśli sieć nie odpowiada automatycznie. W związku z tym nie ma potrzeby dzwonienia pod numer applicationWillTerminate
i próby uruchomienia kodów, aby aplikacja mogła ukończyć swoje zadanie przed zakończeniem aplikacji. Aplikacja wejdzie w tło i będzie kontynuować swoje zadanie aż do ukończenia ostatniego zadania. Mam nadzieję, że ma to sens, ale tutaj jest link. Przeczytaj sekcję strażniczą. https://developer.apple.com/library/ios/#technotes/tn2277/_index.html#//apple_ref/doc/uid/DTS40010841
Mam nadzieję, że to pomoże. :)
Dzięki, zrozumiałem to i mam wszystkie niezbędne kody w applicationDidEnterBackground. Po prostu próbuję dowiedzieć się, który kod należy uwzględnić w applicationWillTerminate, a który pominąć. – SAHM
Naprawdę doceniam komentarz dotyczący przekroczenia limitu czasu aplikacji applicationDidEnterBackground. – SAHM
Nawet nie wołam nic w aplikacji, to już zakończę metodę. Po prostu zostawiam to jako domyślne, które pojawia się podczas tworzenia niezbędnych widoków. począwszy od ios 5, które wywoływałam wszystkie metody w aplikacji, wprowadzałem tło i działa to dobrze dla mnie. nie wiem o żadnym innym, co się stało. –
- 1. Testowanie, czy zdarzenie zostało wywołane w Jasmine
- 2. Zdarzenie onload SVG zostało wywołane zbyt wcześnie?
- 3. Wykrywanie które reaktywne zapytanie zostało wywołane
- 4. Android - Czy zdarzenie zostało wywołane po zakończeniu renderowania elementu activity.setContentView?
- 5. iPhone symulator i applicationWillTerminate()
- 6. C++ "to" nie pasuje do metody obiektu zostało wywołane na
- 7. Dlaczego nie zostało wywołane to wydarzenie przycisku interfejsu użytkownika?
- 8. Jakie wydarzenie zostało wywołane po pełnym wyświetleniu wszystkich widoków?
- 9. Sprawdź, czy zdarzenie nie zostało wywołane na elemencie ze szpiegiem Jasmine
- 10. Czy zdarzenie "gotowe" zostało wywołane, gdy element jQuery jest tworzony w locie?
- 11. Jak ustalić, czy zdarzenie zmiany rozmiaru zostało wywołane przez klawiaturę programową w przeglądarce mobilnej?
- 12. Czy zdarzenie global.asax Application_Error nie zostało wywołane, jeśli włączone są błędy niestandardowe?
- 13. Wywołane wyrażenie expression: Wykonanie zostało przerwane, powód: krok po kroku. Proces został przywrócony do stanu przed oceną wyrażenia
- 14. iOS - viewDidLayoutSubviews wywołane przed ukończeniem automatycznego układu na iOS7
- 15. Kątomierz/Jasmine2 - asynchroniczne wywołanie zwrotne nie zostało wywołane w określonym czasie
- 16. jak sprawdzić, czy zdarzenie "ładowanie" okna zostało uruchomione już
- 17. Rejestracja UP/CANCEL z okna dialogowego, gdy zdarzenie DOWN zostało wywołane z View's LongPress
- 18. Jak mogę sprawdzić, czy okno zostało zamknięte w JavaScript?
- 19. Wystąpienie EC2 zostało zakończone przed uruchomieniem. Brak rejestru konsoli
- 20. Czy istnieje powiadomienie, aby przed aplikacją wprowadzić tło?
- 21. Jak mogę sprawdzić, czy wszystkie moje funkcje init zostały wywołane?
- 22. SplashScreen.Close (Timespan.FromMilliseconds (int)): Czy zostało wysłane zdarzenie w Timespan Complete?
- 23. Dlaczego NVL zawsze ocenia drugi parametr?
- 24. System.Net.WebException: żądanie zostało przerwane: żądanie zostało anulowane
- 25. Czy krojenie obiektów jest zawsze przydatne?
- 26. Sprawdź, czy rozszerzenie zostało zastosowane do zaobserwowania
- 27. SqlConnection.ClearAllPools, co zostało wyczyszczone?
- 28. Efekt OkrągłyIm widok zawsze ma prostokąt przed kołem
- 29. Dziecko przerywane wywołane z ruby
- 30. MVC 3 Session.Abandon() wywołane przed ustawieniem TempData [ „myvalue”] = „bla” powoduje kolejną regulatorowi TempData NULL
Jeśli pracujesz wielozadaniowo, a aplikacja weszła w tło, dlaczego powinna ponownie przejść przez 'applicationDidEnterBackground' zanim zostanie zabita przez użytkownika? – Larme
Rozumiem, że jeśli użytkownik zabije aplikację działającą w tle, dwukrotnie naciskając przycisk strony głównej i naciskając czerwony przycisk minusa, to nie jest wywoływana funkcja ApplicationTerminate. Daj mi znać, jeśli się mylę. – SAHM
@Larme Być może dobrym pytaniem jest, kiedy IS applicationWillTerminate wymaga aplikacji, która obsługuje wielozadaniowość. – SAHM