BETA
Aby się zalogować, najpiew wybierz portal.
Aby się zarejestrować, najpiew wybierz portal.
Podaj słowa kluczowe
Słowa kluczowe muszą mieć co najmniej 3 sąsiadujące znaki alfanumeryczne
Pole zawiera niedozwolone znaki

Baza wiedzy











WP7 dla programistów. Część 6 – Cykl życia aplikacji

09-03-2011 12:00 | Daniel Plawgo
Zapraszam do lektury szóstego artykułu poświęconego Windows Phone 7. W poprzedniej części zapoznaliśmy się z zagadnieniem nawigacji wewnątrz tworzonej przez nas aplikacji. Dziś przyjrzymy się zagadnieniu cyklu życia aplikacji, który jest niezmiernie ważny na platformie Windows Phone 7. Artykuł ten ściśle nawiązuje do równoległego cyklu webcastów dostępnych na Channel 9 poświęconych programowaniu na platformie Windows Phone 7. Tradycją już jest, że zapraszam również do ob

Wstęp

Zapraszam do lektury szóstego artykułu poświęconego Windows Phone 7. W poprzedniej części zapoznaliśmy się z zagadnieniem nawigacji wewnątrz tworzonej przez nas aplikacji. Dziś przyjrzymy się zagadnieniu cyklu życia aplikacji, który jest niezmiernie ważny na platformie Windows Phone 7. Artykuł ten ściśle nawiązuje do równoległego cyklu webcastów dostępnych na Channel 9 poświęconych programowaniu na platformie Windows Phone 7. Tradycją już jest, że zapraszam również do obejrzenia szóstego odcinka, który przygotował Daniel Plawgo.

Dlatego mowa o cyklu życia aplikacji?

Jak sami zapewne wiecie telefon jest dziwnym urządzeniem, na którym może pojawić się duża liczna nieprzewidzianych sytuacji. A to ktoś do Was zadzwoni, ktoś prześle smsa, wyskoczy powiadomienie z kalendarza, powiadomienie o niskim stanie energii, chcecie zmienić aplikacje itp. Jak system w takiej sytuacji może się zachować? W tej chwili stosuje się na ogół dwa podejścia:

  • aplikacja obsługująca daną sytuacje jest uruchamiana, wyświetlana na ekranie, a wszystko inne działa w tle
  • na telefonie w jednej chwili może być uruchomiona jedna aplikacja, a wszystkie inne są uśpione i nic nie jest uruchomione w tle.

Jedno i drugie podejście ma swoje wady i zalety. Nie będę się o nich tutaj rozpisywać. Ważne jest, że w tej chwili Windows Phone 7 zalicza się do tej drugiej kategorii. My jako programiści powinniśmy o tym pamiętać, tak tworzyć nasze aplikacje, aby później nie było nieprzyjemnych sytuacji, w których użytkownik utracił swoje dane podczas procesu zamrażania aplikacji.

W tym miejscu wato też przypomnieć, że na dzień dzisiejszy Microsoft zapowiedział, że w przyszłości pojawi się możliwość uruchamiana aplikacji w tle. No ale to przyszłość.

Cykl życia aplikacji

Poniższy rysunek przedstawia w jakich stanach oraz jaki sposób może został uruchomiona/zamknięta nasza aplikacja oraz jakie metody są w trakcie tego uruchamiane.

Obsługa wszystkich metod znajduje się w pliku App.xaml.cs i są to następujące metody:

  • Application_Launching – metoda jest uruchamiana, wtedy gdy jest tworzona nowa instancja aplikacji, czyli uruchamiany ją z ekranu startowego lub ekranu listy aplikacji. Co ważne tutaj aplikacja nie powinna przywracać stanu aplikacji z jej poprzedniego działania.
  • Application_Closing – metoda jest uruchamiana, wtedy gdy zamykamy aplikację. W przypadku Windows Phone 7 wiąże się to z nacisknięciem przycisku back na pierwszej stronie aplikacji. Tutaj powinno się zapisywać stan aplikacji, który jest ważny między poszczególnymi sesjami działania aplikacji.
  • Application_Deactivated - metoda jest uruchamiana, wtedy gdy właśnie wystawiła jakaś sytuacja, która spowoduje przerwanie działania aplikacji (np. ktoś do nas dzwoni). Właśnie w tej metodzie mamy możliwość zapisywania aktualnego stanu aplikacji (w czym i stanu wizualnego).
  • Application_Activated – metoda jest uruchamiana, wtedy gdy wznawiamy działanie aplikacji, która wcześniej została zamrożona. Tutaj powinniśmy przywrócić cały stan aplikacji zapisany w poprzedniej metodzie. Użytkownik powinien mieć wrażenie, że aplikacja działa cały czas w tle, dlatego musimy pamiętać  też o stanie wizualnym aplikacji.

W przypadku powyższych metod musimy pamiętać o tym, że nie mogą się one wykonywać dłużej niż 10 sekund. To tym czasie system automatycznie zabije aplikacje. Dlatego w przypadku metod Application_Launching oraz Application_Activated warto dane przywracać w sposób asynchroniczny. Natomiast w przypadku dużej ilości danych, które powinny zostać zapisywane, należy je zapisywać podczas działania aplikacji, a nie czekać do momentu wywołania metod.

Zapisywane oraz przywracanie stanu

Gdzie oraz jak możemy zapisać i później przywrócić stan naszej aplikacji? Możemy to zrobić w dwóch miejscach:

  • słownik State, którzy jako klucze przyjmuje string natomiast przechowuje typ object
  • Isolated Storage

O drugim sposobie będzie oddzielny odcinek w naszej serii, dlatego dzisiaj pozwolę go sobie nie opisywać.

Słownik State to słownik, który znajduje się w pamięci ram telefonu, przez co dostęp do niego jest dużo szybszy niż do Isolated Storage. Tak się składa, że w przypadku zamrażania aplikacji dane z tego słownika nie są usuwane od razu z pamięci ram, tylko sobie w niej jeszcze przez jakiś czas tam siedzą. Jak długo? Wszystko zależy od tego jak dużo w między czasie uruchomiliśmy aplikacji. W celach wydajnościowych podczas deaktywowania aplikacji warto zapisywać sobie dane trwałe również w tym słowniku, dzięki czemu później przy aktywowaniu aplikacji szybciej się ona uruchomi o ile jeszcze będzie istniał ten słownik.

Dostęp do tego słownika mamy za pomocą klasy PhoneApplicationService i zapisać do niego możemy wykonując np. taki kod:

PhoneApplicationService.Current.State["user"] = User;

Dodatkowo każda strona ma swój własne słownik, który dostępny pod właściwością State.

W tym artykule nie będę szczegółowo opisywał w jaki sposób z tego skorzystać. Zapraszam do nagrania na CH9, gdzie wszystko jest dokładnie omówione i pokazane.

Wyjątki

Istnieje kilka wyjątków, których uruchomienie nie spowoduje zamrożenia aplikacji. Są to:

  • PhotoChooserTask
  • CameraCaptureTask
  • MediaPlayerLauncher
  • EmailAddressChooserTask
  • PhoneNumberChooserTask
  • Multiplayer Game Invite [games]
  • Gamer You Card [games]

System może podjąć decyzje, że posiada wystarczającą ilość zasobów aby uruchomić jeden w powyższych elementów, dzięki czemu później użytkownik nie będzie musiał czekać na przywrócenie stanu aplikacji.

Podsumowanie

Tak oto dotarliśmy do do końca dzisiejszego zagadnienia. Przypominam, że równolegle z tym cyklem artykułów na Channel 9 jest również publikowana seria webcastów poświęcona Windows Phone 7. Tym samym zapraszam do obejrzenia szóstego odcinka. Jak zawsze zachęcam do śledzenia obu serii oraz w razie pytań umieszczania ich pod artykułami lub bezpośrednio pod nagraniami na CH9.

Daniel Plawgo
Daniel Plawgo
Na co dzień programista technologii .NET, dla którego to również hobby. Od lat związany z Olsztyńską społecznością pasjonatów technologii Microsoftu.

Podobne artykuły

Komentarze 0

pkt.

Zaloguj się lub Zarejestruj się aby wykonać tę czynność.