Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
W tym temacie opisano cykl życia aplikacji Universal Windows Platform (UWP) od momentu jej uruchomienia do momentu jej zamknięcia.
Trochę historii
Przed Windows 8 aplikacje miały prosty cykl życia. Aplikacje Win32 i .NET są uruchomione lub nie są uruchomione. Gdy użytkownik je zminimalizuje lub przełączy się na inną aplikację, nadal działają. Było to w porządku, dopóki przenośne urządzenia i zarządzanie energią stały się coraz ważniejsze.
Windows 8 wprowadzono nowy model aplikacji z aplikacjami platformy UWP. Ogólnie rzecz biorąc, dodano nowy stan zawieszenia. Aplikacja platformy UWP jest zawieszona wkrótce po zminimalizowaniu jej lub przełączeniu do innej aplikacji. Oznacza to, że wątki aplikacji są zatrzymywane, a aplikacja pozostaje w pamięci, chyba że system operacyjny musi odzyskać zasoby. Gdy użytkownik przełączy się z powrotem do aplikacji, można go szybko przywrócić do stanu działania.
Istnieją różne sposoby uruchamiania aplikacji, które muszą nadal działać, gdy znajdują się w tle, takie jak zadania w tle, rozszerzone wykonywanie i sponsorowane wykonywanie działań (na przykład funkcja BackgroundMediaEnabled , która umożliwia aplikacji kontynuowanie odtwarzania multimediów w tle). Ponadto operacje transferu w tle mogą być kontynuowane nawet wtedy, gdy aplikacja jest zawieszona, a nawet zakończona. Aby uzyskać więcej informacji, zobacz Jak pobrać plik.
Domyślnie aplikacje, które nie znajdują się na pierwszym planie, są zawieszone. Powoduje to oszczędność energii i więcej zasobów dostępnych dla aplikacji na pierwszym planie.
Stan wstrzymania dodaje nowe wymagania dla Ciebie jako deweloper, ponieważ system operacyjny może zdecydować się na zakończenie zawieszonej aplikacji w celu zwolnienia zasobów. Aplikacja zakończona nadal będzie wyświetlana na pasku zadań. Po kliknięciu go przez użytkownika aplikacja musi przywrócić stan, w jaki znajdował się przed jego zakończeniem, ponieważ użytkownik nie będzie wiedział, że system zamknął aplikację. Będą myśleć, że czeka w tle, podczas gdy robili inne rzeczy i spodziewają się, że będzie w tym samym stanie, w jaki był, kiedy go opuścili. W tym temacie przyjrzymy się temu, jak to osiągnąć.
Windows 10 w wersji 1607 wprowadzono jeszcze dwa stany modelu aplikacji: Działanie na pierwszym planie i Działanie w tle. Przyjrzymy się tym dodatkowym stanom USA w kolejnych sekcjach.
Stan wykonywania aplikacji
Ta ilustracja przedstawia możliwe stany modelu aplikacji, począwszy od Windows 10 w wersji 1607. Przyjrzyjmy się typowemu cyklowi życia aplikacji platformy UWP.
Aplikacje przechodzą do stanu działania w tle po ich uruchomieniu lub aktywowaniu. Jeśli aplikacja musi przejść na pierwszy plan ze względu na uruchomienie aplikacji pierwszego planu, aplikacja pobiera zdarzenie LeavingBackground .
Chociaż terminy „uruchomienie” i „aktywacja” mogą wydawać się podobne, odnoszą się one do różnych sposobów, w jakie system operacyjny może uruchomić aplikację. Najpierw przyjrzyjmy się uruchamianiu aplikacji.
Uruchamianie aplikacji
Metoda OnLaunched jest wywoływana, gdy aplikacja zostaje uruchomiona. Jest przekazywany parametr LaunchActivatedEventArgs , który udostępnia między innymi argumenty przekazane do aplikacji, identyfikator kafelka, który uruchomił aplikację, oraz poprzedni stan, w którym znajdowała się aplikacja.
Pobierz poprzedni stan aplikacji z elementu LaunchActivatedEventArgs.PreviousExecutionState , który zwraca wartość ApplicationExecutionState. Jej wartości i odpowiednie działania, które należy wykonać z powodu tego stanu, są następujące:
| ApplicationExecutionState | Explanation | Czynność do wykonania |
|---|---|---|
| NotRunning | Aplikacja może być w tym stanie, ponieważ nie została uruchomiona od czasu, gdy użytkownik ostatnio ponownie uruchomił urządzenie lub się zalogował. Może być również w tym stanie, jeśli był uruchomiony, ale następnie uległ awarii lub dlatego, że użytkownik zamknął go wcześniej. | Zainicjuj aplikację tak, jakby była uruchomiona po raz pierwszy w bieżącej sesji użytkownika. |
| Zawieszone | Użytkownik zminimalizował aplikację lub przełączył się do innej aplikacji i nie wrócił do niej w ciągu kilku sekund. | Gdy aplikacja została zawieszona, jej stan pozostał w pamięci. Wystarczy ponownie uzyskać wszelkie uchwyty plików lub inne zasoby, które zostały zwolnione podczas zawieszenia aplikacji. |
| Zakończony | Aplikacja została wcześniej zawieszona, ale została zamknięta w pewnym momencie, ponieważ system musiał odzyskać pamięć. | Przywróć stan, w którym znajdowała się aplikacja, gdy użytkownik odszedł od niej. |
| ClosedByUser | Użytkownik zamknął aplikację za pomocą przycisku zamknięcia systemu lub Alt+F4. Gdy użytkownik zamknie aplikację, zostanie ona najpierw zawieszona, a następnie zakończona. | Ponieważ aplikacja zasadniczo przeszła przez te same kroki, które prowadzą do stanu Zakończono, obsłuż to w ten sam sposób, jak stan Zakończono. |
| Działa | Aplikacja była już otwarta, gdy użytkownik próbował ją ponownie uruchomić. | Nic. Upewnij się, że nie została uruchomiona inna instancja aplikacji. Już uruchomione wystąpienie jest po prostu aktywowane. |
Note
Bieżąca sesja użytkownika jest oparta na logowaniu do systemu Windows. O ile bieżący użytkownik nie wylogował się, nie wyłączył systemu ani nie uruchomił ponownie systemu Windows, bieżąca sesja użytkownika utrzymuje się mimo zdarzeń, takich jak uwierzytelnianie ekranu blokady, przełączanie użytkowników itd.
Jedną z ważnych okoliczności, o których należy pamiętać, jest to, że jeśli urządzenie ma wystarczające zasoby, system operacyjny wstępnie uruchomi często używane aplikacje, w których włączono to zachowanie, aby zoptymalizować czas odpowiedzi. Aplikacje, które zostały wstępnie uruchomione, są uruchamiane w tle, a następnie szybko wstrzymywane, dzięki czemu po przełączeniu się do nich aplikacja może zostać wznowiona, co jest szybsze niż uruchamianie aplikacji.
Ze względu na wstępne uruchamianie metoda OnLaunched() aplikacji może być inicjowana przez system, a nie przez użytkownika. Ponieważ aplikacja jest uruchamiana wstępnie w tle, może być konieczne wykonanie innego działania w metodzie OnLaunched(). Jeśli na przykład aplikacja zacznie odtwarzać muzykę po uruchomieniu, użytkownicy nie będą wiedzieć, skąd dobiega muzyka, ponieważ aplikacja jest wstępnie uruchomiona w tle. Po wstępnym uruchomieniu aplikacji w tle następuje wywołanie zdarzenia Application.Suspending. Następnie, gdy użytkownik rzeczywiście uruchomi aplikację, zdarzenie wznowienia jest wywoływane, a także metoda OnLaunched(). Aby uzyskać dodatkowe informacje na temat obsługi scenariusza wstępnego uruchamiania, zobacz Obsługa wstępnego uruchamiania aplikacji. Tylko aplikacje, które wyrażą zgodę, są uruchamiane wcześniej.
Windows wyświetla ekran powitalny aplikacji po jej uruchomieniu. Aby skonfigurować ekran powitalny, zobacz Dodawanie ekranu powitalnego.
Po wyświetleniu ekranu powitalnego aplikacja powinna zarejestrować procedury obsługi zdarzeń i skonfigurować dowolny niestandardowy interfejs użytkownika, którego potrzebuje dla strony początkowej. Sprawdź, czy te zadania wykonywane w konstruktorze aplikacji i OnLaunched() zakończą się w ciągu kilku sekund, bo w przeciwnym razie system może uznać, że aplikacja nie odpowiada, i zakończyć jej działanie. Jeśli aplikacja musi zażądać danych z sieci lub musi pobrać duże ilości danych z dysku, te działania powinny zostać wykonane poza procesem uruchamiania aplikacji. Aplikacja może używać własnego niestandardowego interfejsu użytkownika ładowania lub rozszerzonego ekranu powitalnego podczas oczekiwania na zakończenie długotrwałych operacji. Więcej informacji znajdziesz w artykule Wyświetlanie ekranu powitalnego przez dłuższy czas oraz w przykładzie ekranu powitalnego.
Po zakończeniu uruchamiania aplikacja przechodzi w stan Działa, a ekran powitalny znika, a wszystkie zasoby i obiekty ekranu powitalnego zostają wyczyszczone.
Aktywacja aplikacji
W przeciwieństwie do uruchomienia przez użytkownika aplikacja może zostać aktywowana przez system. Aplikacja może zostać aktywowana przez kontrakt, taki jak kontrakt udostępniania danych. Może też zostać aktywowana do obsługi niestandardowego protokołu URI lub pliku z rozszerzeniem, do obsługi którego aplikacja jest zarejestrowana. Aby uzyskać listę sposobów aktywowania aplikacji, zobacz ActivationKind.
Klasa Windows.UI.Xaml.Application definiuje metody, które można przesłonić w celu obsługi różnych sposobów aktywowania aplikacji. OnActivated może obsługiwać wszystkie możliwe typy aktywacji. Jednak częściej używa się określonych metod do obsługi najbardziej typowych typów aktywacji i stosuje metodę OnActivated jako metodę rezerwową dla mniej typowych typów aktywacji. Są to dodatkowe metody dla określonych aktywacji:
OnCachedFileUpdaterActivated
OnFileActivated
OnFileOpenPickerActivatedOnFileSavePickerActivated
OnSearchActivated
OnShareTargetActivated
Dane zdarzenia dla tych metod zawierają tę samą właściwość PreviousExecutionState , którą widzieliśmy powyżej, która informuje o stanie, w którym znajdowała się aplikacja przed jej aktywacją. Zinterpretuj stan i to, co należy zrobić, w taki sam sposób, jak opisano powyżej w sekcji Uruchamianie aplikacji.
Uwaga Jeśli logujesz się przy użyciu konta administratora komputera, nie możesz aktywować aplikacji platformy UWP.
Uruchamianie w tle
Począwszy od Windows 10 w wersji 1607, aplikacje mogą uruchamiać zadania w tle w ramach tego samego procesu co sama aplikacja. Dowiedz się więcej na ten temat w Aktywność w tle w modelu pojedynczego procesu. Nie będziemy omawiać przetwarzania w tle w ramach procesu w tym artykule, ale wpływ na cykl życia aplikacji polega na tym, że dodano dwa nowe zdarzenia związane z tym, kiedy aplikacja działa w tle. Są to: EnteredBackground i LeavingBackground.
Te zdarzenia odzwierciedlają również, czy użytkownik może zobaczyć interfejs użytkownika aplikacji.
Działanie w tle jest domyślnym stanem, w którym aplikacja jest uruchamiana, aktywowana lub wznawiana. W tym stanie interfejs użytkownika aplikacji nie jest jeszcze widoczny.
Działa na pierwszym planie
Działanie na pierwszym planie oznacza, że interfejs użytkownika aplikacji jest widoczny.
Zdarzenie LeavingBackground jest uruchamiane tuż zanim interfejs użytkownika aplikacji stanie się widoczny i przed wejściem do działania w stanie pierwszego planu. Jest ona również uruchamiana, gdy użytkownik wraca do aplikacji.
Wcześniej najlepszą lokalizacją do załadowania zasobów interfejsu użytkownika były procedury obsługi zdarzeń Activated lub Resuming. Teraz LeavingBackground to najlepsze miejsce, aby sprawdzić, czy interfejs użytkownika jest gotowy.
Należy sprawdzić, czy zasoby wizualne są gotowe do tego czasu, ponieważ jest to ostatnia okazja do wykonania pracy, zanim aplikacja będzie widoczna dla użytkownika. Wszystkie działania interfejsu użytkownika w tej procedurze obsługi zdarzeń powinny zostać ukończone szybko, ponieważ ma to wpływ na czas uruchamiania i wznawiania odczuwany przez użytkownika. LeavingBackground to czas, aby upewnić się, że pierwszy ekran interfejsu użytkownika jest gotowy. Następnie długotrwałe operacje na pamięci masowej lub sieci powinny być obsługiwane asynchronicznie, aby program obsługi zdarzeń mógł powrócić.
Gdy użytkownik przełączy się z aplikacji, aplikacja ponownie przechodzi do stanu działania w tle.
Ponowne przechodzenie do stanu tła
Zdarzenie EnteredBackground wskazuje, że aplikacja nie jest już widoczna jako aktywna aplikacja. Na pulpicie EnteredBackground jest uruchamiana po zminimalizowaniu aplikacji; na telefonie podczas przełączania się na ekran główny lub inną aplikację.
Zmniejszanie użycia pamięci aplikacji
Ponieważ aplikacja nie jest już widoczna dla użytkownika, to najlepszy moment, aby wstrzymać renderowanie interfejsu użytkownika i animacje. Możesz użyć polecenia LeavingBackground , aby ponownie uruchomić tę pracę.
Jeśli zamierzasz pracować w tle, to tutaj możesz się do tego przygotować. Najlepiej sprawdzić MemoryManager.AppMemoryUsageLevel, a w razie potrzeby zmniejszyć ilość pamięci używanej przez aplikację, gdy jest ona uruchomiona w tle, aby aplikacja nie ryzykowała zakończenia przez system w celu zwolnienia zasobów.
Aby uzyskać więcej szczegółów, zobacz Zmniejszanie użycia pamięci podczas przejścia aplikacji do stanu tła .
Zapisz swój stan
Procedura obsługi zdarzeń wstrzymania jest najlepszym miejscem do zapisania stanu aplikacji. Jeśli jednak wykonujesz pracę w tle (na przykład odtwarzanie audio, przy użyciu rozszerzonej sesji wykonywania lub zadania w tle w proc), dobrym rozwiązaniem jest również asynchroniczne zapisywanie danych w programie obsługi zdarzenia EnteredBackground. Jest to spowodowane tym, że aplikacja może zakończyć działanie, gdy jest ona w tle o niższym priorytecie. Ponieważ w takim przypadku aplikacja nie przejdzie przez stan wstrzymania, dane zostaną utracone.
Zapisanie danych w procedurze obsługi zdarzenia EnteredBackground przed rozpoczęciem działania w tle zapewnia dobre wrażenia użytkownika, gdy użytkownik przywróci aplikację na pierwszy plan. Interfejsy API danych aplikacji umożliwiają zapisywanie danych i ustawień. Aby uzyskać więcej informacji, zobacz Przechowywanie i pobieranie ustawień oraz innych danych aplikacji.
Po zapisaniu danych, jeśli przekraczasz limit użycia pamięci, możesz zwolnić dane z pamięci, ponieważ można je ponownie załadować później. Spowoduje to zwolnienie pamięci, która może być użyta na potrzeby zasobów wymaganych do działania w tle.
Należy pamiętać, że jeśli aplikacja ma w toku działanie w tle, że może przejść z działania w stanie w tle do działania w stanie pierwszego planu bez osiągnięcia stanu wstrzymania.
Note
Gdy aplikacja jest zamykana przez użytkownika, możliwe jest, że zdarzenie OnSuspending zostanie wyzwolone przed zdarzeniem EnteredBackground . W niektórych przypadkach zdarzenie EnteredBackground może nie zostać wyzwolone przed zakończeniem działania aplikacji. Ważne jest, aby zapisać dane w procedurze obsługi zdarzeń OnSuspending .
Praca asynchroniczna i odroczenia
Jeśli wykonasz wywołanie asynchroniczne w programie obsługi, sterowanie wraca natychmiast z tego wywołania asynchronicznego. Oznacza to, że wykonanie może następnie wrócić z procedury obsługi zdarzeń, a aplikacja przejdzie do następnego stanu, mimo że wywołanie asynchroniczne nie zostało jeszcze ukończone. Użyj metody GetDeferral na obiekcie EnteredBackgroundEventArgs przekazywanym do programu obsługi zdarzeń, aby opóźnić zawieszenie do momentu wywołania metody Complete na zwróconym obiekcie Windows.Foundation.Deferral.
Odroczenie nie zwiększa czasu, przez jaki możesz wykonywać kod, przed zakończeniem działania aplikacji. Opóźnia to zakończenie tylko do momentu wywołania metody Complete odroczenia lub do upływu terminu, w zależności od tego, co nastąpi wcześniej.
Jeśli potrzebujesz więcej czasu na zapisanie stanu, zbadaj sposoby zapisania stanu etapami, zanim aplikacja przejdzie do stanu tła, aby mniej było do zapisania w procedurze obsługi zdarzenia OnSuspending. Możesz też zażądać ExtendedExecutionSession, aby uzyskać więcej czasu. Nie ma jednak gwarancji, że prośba zostanie przyznana, dlatego najlepiej znaleźć sposoby zminimalizowania ilości czasu potrzebnego do zapisania stanu.
Wstrzymanie aplikacji
Gdy użytkownik zminimalizuje aplikację, Windows poczeka kilka sekund, aby sprawdzić, czy użytkownik przełączy się z powrotem do niej. Jeśli nie wrócą do aplikacji w tym przedziale czasu, a żadne rozszerzone wykonywanie, zadanie w tle ani activity sponsored execution nie są aktywne, system Windows zawiesza aplikację. Aplikacja jest również zawieszona, gdy pojawia się ekran blokady, o ile w tej aplikacji nie jest aktywna sesja wykonywania rozszerzonego itp.
Gdy aplikacja zostaje zawieszona, wywoływane jest zdarzenie Application.Suspending. szablony projektów platformy UWP Visual Studio udostępniają procedurę obsługi dla tego zdarzenia o nazwie OnSuspending w App.xaml.cs. W tym miejscu należy umieścić kod w celu zapisania stanu aplikacji.
Należy zwolnić wyłączne zasoby i uchwyty plików, aby inne aplikacje mogły uzyskiwać do nich dostęp, gdy aplikacja jest zawieszona. Przykłady zasobów wyłącznych obejmują kamery, urządzenia we/wy, urządzenia zewnętrzne i zasoby sieciowe. Jawne zwalnianie wyłącznych zasobów i uchwytów plików pomaga zagwarantować, że inne aplikacje będą mogły uzyskiwać do nich dostęp, gdy aplikacja jest zawieszona. Po wznowieniu działania aplikacji należy ponownie uzyskać dostęp do zasobów wyłącznych i uchwytów plików.
Należy pamiętać o terminie
Aby zapewnić szybkie i responsywne urządzenie, istnieje limit czasu na wykonanie kodu w procedurze obsługi zdarzeń wstrzymania. Jest on inny dla każdego urządzenia i możesz dowiedzieć się, jaka ona jest, używając właściwości obiektu SuspendingOperation o nazwie deadline.
Podobnie jak w przypadku obsługi zdarzenia EnteredBackground, jeśli wykonasz wywołanie asynchroniczne w programie obsługi, sterowanie natychmiast wraca po tym wywołaniu asynchronicznym. Oznacza to, że sterowanie może następnie powrócić z procedury obsługi zdarzenia, a aplikacja przejdzie do stanu wstrzymania, mimo że operacja asynchroniczna nie została jeszcze ukończona. Użyj metody GetDeferral w obiekcie SuspendingOperation (dostępnej za pośrednictwem args zdarzenia), aby opóźnić wprowadzanie stanu zawieszonego do momentu wywołania metody Complete dla zwróconego obiektu SuspendingDeferral .
Jeśli potrzebujesz więcej czasu, możesz zażądać rozszerzenia ExtendedExecutionSession. Nie ma gwarancji, że żądanie zostanie przyznane, dlatego najlepiej znaleźć sposoby zminimalizowania ilości czasu potrzebnego w programie obsługi zdarzeń zawieszonych .
Kończenie działania aplikacji
System próbuje utrzymać Twoją aplikację i jej dane w pamięci, gdy jest ona zawieszona. Jeśli jednak system nie ma zasobów, aby zachować aplikację w pamięci, zakończy działanie aplikacji. Aplikacje nie otrzymują powiadomienia, że są one przerywane, więc jedyną możliwością zapisania danych aplikacji jest program obsługi zdarzeń OnSuspending .
Gdy aplikacja ustali, że została aktywowana po zakończeniu, powinna załadować zapisane dane aplikacji, aby aplikacja znajdowała się w tym samym stanie, w jakim została zakończona. Gdy użytkownik wróci do zawieszonej aplikacji, która została zakończona, aplikacja powinna przywrócić dane aplikacji w metodzie OnLaunched. System nie powiadamia aplikacji po jej zakończeniu, dlatego aplikacja musi zapisać dane aplikacji i zwolnić wyłączne zasoby i uchwyty plików przed jej zawieszeniem i przywrócić je po aktywowaniu aplikacji po zakończeniu.
Uwaga dotycząca debugowania przy użyciu programu Visual Studio: Program Visual Studio uniemożliwia systemowi Windows wstrzymanie aplikacji dołączonej do debugera. Umożliwia to użytkownikowi wyświetlanie interfejsu debugowania programu Visual Studio podczas działania aplikacji. Podczas debugowania aplikacji możesz wysłać do niej zdarzenie wstrzymania przy użyciu Visual Studio. Upewnij się, że jest wyświetlany pasek narzędzi Lokalizacja debugowania , a następnie kliknij ikonę Wstrzymaj .
Wznawianie aplikacji
Wstrzymana aplikacja jest wznawiana, gdy użytkownik przełącza się do niej lub gdy jest aktywną aplikacją, kiedy urządzenie wychodzi ze stanu niskiego poboru mocy.
Gdy aplikacja zostanie wznowiona ze stanu Wstrzymane, przechodzi do stanu Uruchomione w tle, a system przywraca aplikację do miejsca, w którym została pozostawiona, tak aby użytkownik miał wrażenie, że była uruchomiona przez cały czas. Żadne dane aplikacji przechowywane w pamięci nie zostaną utracone. W związku z tym większość aplikacji nie musi przywracać stanu po wznowieniu, jednak powinna ponownie uzyskać wszelkie uchwyty plików lub urządzeń, które zostały zwolnione, gdy zostały zawieszone, i przywrócić dowolny stan, który został jawnie zwolniony, gdy aplikacja została zawieszona.
Twoja aplikacja może zostać zawieszona na kilka godzin lub dni. Jeśli aplikacja ma zawartość lub połączenia sieciowe, które mogły się zdezaktualizować, powinny one zostać odświeżone po wznowieniu działania aplikacji. Jeśli aplikacja zarejestrowała procedurę obsługi dla zdarzenia Application.Resuming, jest ona wywoływana po wznowieniu aplikacji ze stanu Zawieszone. Zawartość i dane aplikacji można odświeżyć w tej procedurze obsługi zdarzeń.
Jeśli zawieszona aplikacja zostanie aktywowana, aby uczestniczyć w umowie lub rozszerzeniu aplikacji, najpierw otrzyma zdarzenie Resuming, a następnie zdarzenie Activated.
Jeśli zawieszona aplikacja została zakończona, nie ma zdarzenia Resuming, a zamiast tego wywoływana jest metoda OnLaunched() z wartością ApplicationExecutionState równą Terminated. Ponieważ zapisałeś swój stan, gdy aplikacja została zawieszona, możesz przywrócić ten stan podczas OnLaunched(), tak aby aplikacja wydawała się użytkownikowi taka, jak wtedy, gdy użytkownik przełączył się z niej.
Gdy aplikacja jest zawieszona, nie otrzymuje żadnych zdarzeń sieciowych, które aplikacja zarejestrowała do odbierania. Te zdarzenia sieciowe nie są umieszczone w kolejce — są po prostu tracone. W związku z tym Twoja aplikacja powinna przetestować stan sieci, gdy zostanie wznowiona.
Uwaga Ponieważ zdarzenie wznawiania nie jest wywoływane z wątku interfejsu użytkownika, należy użyć dispatcher, jeśli kod w procedurze obsługi wznawiania komunikuje się z interfejsem użytkownika. Zobacz Aktualizowanie wątku interfejsu użytkownika z wątku w tle , aby zapoznać się z przykładem kodu, jak to zrobić.
Aby uzyskać ogólne wskazówki, zobacz Wytyczne dotyczące zawieszania i wznawiania aplikacji.
Zamknięcie aplikacji
Ogólnie rzecz biorąc, użytkownicy nie muszą zamykać aplikacji, mogą pozwolić systemowi Windows nimi zarządzać. Jednak użytkownicy mogą zamknąć aplikację za pomocą gestu zamknięcia lub naciskając klawisze Alt+F4.
Nie ma zdarzenia wskazującego, że użytkownik zamknął aplikację. Gdy użytkownik zamknie aplikację, zostanie ona najpierw zawieszona, aby umożliwić zapisanie stanu aplikacji. W systemie Windows 8.1 i nowszych wersjach po zamknięciu aplikacji przez użytkownika aplikacja jest usuwana z ekranu i z listy przełączania, ale nie jest jawnie kończona.
Zachowanie przy zamknięciu przez użytkownika: Jeśli aplikacja ma wykonać inne działanie, gdy zostanie zamknięta przez użytkownika, niż gdy zostanie zamknięta przez system Windows, możesz użyć procedury obsługi zdarzenia aktywacji, aby określić, czy aplikacja została zakończona przez użytkownika, czy przez system Windows. Zobacz opisy stanów ClosedByUser i Terminated w dokumentacji dla wyliczenia ApplicationExecutionState .
Zalecamy, aby aplikacje nie zamykały się programowo, chyba że jest to absolutnie konieczne. Na przykład jeśli aplikacja wykryje wyciek pamięci, może się zamknąć, aby zapewnić bezpieczeństwo danych osobowych użytkownika.
Awaria aplikacji
Środowisko obsługi awarii systemu zostało zaprojektowane tak, aby umożliwić użytkownikom jak najszybszy powrót do tego, co robili. Nie należy wyświetlać okna dialogowego ostrzeżenia ani innego powiadomienia, ponieważ opóźni to użytkownika.
Jeśli aplikacja ulegnie awarii, przestanie odpowiadać lub generuje wyjątek, raport o problemach jest wysyłany do Microsoft zgodnie z ustawieniami opinii i diagnostyki użytkownika. Aby uzyskać więcej informacji, zobacz Diagnostyka, opinie i prywatność w Windows. Microsoft udostępnia Ci część danych o błędach zawartych w raporcie o problemie, aby umożliwić Ci wykorzystanie tych danych do ulepszania swojej aplikacji. Te dane będzie można zobaczyć na stronie Jakość aplikacji w Dashboardzie.
Gdy użytkownik aktywuje aplikację po awarii, jej procedura obsługi zdarzenia aktywacji otrzymuje wartość ApplicationExecutionStateNotRunning i powinna wyświetlić początkowy interfejs użytkownika i dane. Po awarii nie należy standardowo korzystać z danych aplikacji, których użyto by do wznawiania zzawieszenia, ponieważ dane te mogą być uszkodzone; zobacz Wskazówki dotyczące zawieszania i wznawiania aplikacji.
Usuwanie aplikacji
Gdy użytkownik usunie Twoją aplikację, zostanie ona usunięta wraz z jej wszystkimi lokalnymi danymi. Usunięcie aplikacji nie wpływa na dane użytkownika przechowywane w typowych lokalizacjach, takich jak dokumenty lub obrazy biblioteki.
Cykl życia aplikacji i szablony projektów Visual Studio
Podstawowy kod, który jest istotny dla cyklu życia aplikacji, jest udostępniany w szablonach projektów Visual Studio. Podstawowa aplikacja obsługuje aktywację przy uruchamianiu, zapewnia miejsce do przywracania danych aplikacji i wyświetla główny interfejs użytkownika jeszcze przed dodaniem jakiegokolwiek własnego kodu. Aby uzyskać więcej informacji, zobacz Szablony projektów C#, VB i C++ dla aplikacji.
Kluczowe interfejsy API cyklu życia aplikacji
- przestrzeń nazw Windows.ApplicationModel
- Windows.ApplicationModel.Activation przestrzeń nazw
- przestrzeń nazw Windows.ApplicationModel.Core
- Windows.UI.Xaml.Application klasa (XAML)
- Windows. Interfejs użytkownika. Xaml.Window, klasa (XAML)