Pokazywanie postów oznaczonych etykietą Silverlight. Pokaż wszystkie posty
Pokazywanie postów oznaczonych etykietą Silverlight. Pokaż wszystkie posty

piątek, 13 maja 2011

Silverlight 5 Beta - pierwsze kroki w grafice 3D + wirtualna wycieczka po Babilonie (po dwakroć) !

Przydatne moim zdaniem linki, ciekawe dema i biblioteki całościowo zebrałem pisząc post 3D Graphics in Silverlight 5 Beta: links + cool apps !. Tutaj podsumuję typowe tworzenie prostej grafiki 3D, dostępne możliwości w Silverlight 5 Beta, a następnie zrobię sobie (na razie nietechniczną) wycieczkę po wirtualnych trójwymiarowych światach, jakie możemy odnaleźć w demie Babylon 3D Engine.

Tworzenie grafiki trójwymiarowej zaczyna się tłumaczyć od prostych brył. Podobnie jak na studiach zacząłem zabawę od sześcianu.

01_Przechwytywanie

Jak korzysta się z grafiki 3D na Silverlight 5? Typowo można zamknąć to w kilku etapach:

  1. Włączenie akceleracji sprzętowej w plug-inie.
  2. Umieszczamy kontrolkę DrawingSurface i obsługujemy jej zdarzenie Draw.
  3. Tworzymy definicję struktury dla naszych vertex-ów (mogą być w niej trzymane pozycja, kolor, współrzędne do tekstury).
  4. Tworzymy dane dla vertex-ów opisujące bryłę 3d.
  5. Tworzymy bufor dla vertex-ów i ładujemy do niego poprzednio przygotowane dane
  6. Tworzymy obiekty vertexshader-a i pixelshader-a (na podstawie plików .ps -wczytywanych z resourse-ów assembly)
  7. Jeśli nasz vertexshader wymaga macierzy - tworzymy macierze widoków World, Camera, Projection
  8. W zdarzeniu Draw:
    1. Czyścimy urządzenie, ustawiamy kolor (biały, czarny, przezroczysty).
    2. Ustawiamy na urządzeniu bufor vertex-ów (korzystając z wcześniej przygotowanego przez nas bufora).
    3. Ustawiamy na urządzeniu vertexshader-a i macierz będącą jego parametrem.
    4. Ustawiamy na urządzeniu pixelshader-a.
    5. Wywołujemy rysowanie (nasze wierzchołki mogą być łączone liniami lub trójkątami na kilka predefiniowanych sposobów)
    6. Możemy zakolejkować następne wywołanie zdarzenia Draw
  9. Możemy odświeżyć powierzchnię także z poziomu wątku UI.

Jak widać API jest dość niskopoziomowe, nie jest to wysokopoziomowa obsługa znana z WPF. Szczególne powody do zadowolenia mają programiści znający XNA, bo mamy tutaj import podzbioru API z XNA 4.0. Oczywiście są też różnice, nie wszystko trafiło do wydania SL5 beta, nie wszystko też trafi do wydania SL5 RTW.

Kilka uwag:

  1. Starszy model sterowników (np. Windows XP) wymaga zezwolenia od strony użytkownika lub zwiększonych uprawnień. Nowy model WDDM nie potrzebuje o nic pytać.
  2. Nie ma emulacji programowej. Musimy mieć fizyczny sprzęt - kartę graficzną z obsługą przynajmniej DirectX 9.
  3. Nie mamy pętli gry - jawnie decydujemy o kolejnym odświeżeniu albo w samym zdarzeniu Draw albo w innym miejscu aplikacji z wątku UI.
  4. Nie mamy predefiniowanych struktur XNA dla definicji vertexshader-ów, mamy dużą elastyczność – to my decydujemy, jak nasza struktura ma wyglądać.
  5. W Becie nie mamy wbudowanych efektów XNA - póki co do wszystkiego potrzebujemy vertexshader-ów i pixelshader-ów. Własnych efektów nie będzie w ramach releasu.
  6. Obsługiwane są tylko shadery w wersji 2.0
  7. Obsługiwany jest tylko profil Reach.
  8. W Becie nie mamy Math Library, która została udostępniona na razie w postaci oddzielnie dystrybuowanego assembly. Nie musimy znać się na macierzach i obliczeniach, mamy wysokopoziomowe API pozwalające tworzyć macierze dla odpowiednich transformacji i widoków.
  9. Obecnie nie mamy standardowego wsparcia dla ładowania modeli, ale już teraz powstały do tego odpowiednie rozwiązania (Silverlight 3D Model Importer, Babylon Toolkit).
  10. Animacje 3D powstają na skutek zmiany parametrów macierzy i cyklicznego odświeżania w handlerze zdarzenia Draw, w którym mamy dostęp do informacji o czasie, który upłynął od początku aplikacji i od ostatniego odświeżenia.
  11. Handler zdarzenia Draw wykonywany jest przez tzw. composition thread.
  12. Nie powinniśmy w Draw wykonywać inicjalizować danych czy je zmieniać, nie odwołujemy się do obiektów DependencyObject.  Powinniśmy o tym pamiętać, gdy będziemy chcieli “sterować” obiektem 3D z poziomu UI.
  13. Obecnie mamy po dwie klasy Rectangle, Color, PixelShader - jedne z Silverlight, drugie z XNA. Nie możemy ich mylić. Kolory są określane nieco inaczej.
  14. API daje nam możliwość dowiedzenia się o przyczynie niewyświetlania grafiki 3D.

A teraz zapraszam na wirtualną wycieczkę po Babilonie, a konkretnie po restauracji w dwóch odsłonach! Aby skompilować przykład najwygodniej zainstalować sobie DirectX SDK (potrzebny kompilator FXC.exe do kompilacji HLSL) oraz HLSL Build Task.

W restauracji oprócz jedzenia są…  laptopy z Windows 7 oraz … Microsoft Surface! W tym i w większości przykładów poruszamy się i obracamy strzałkami lub myszą.

03_Przechwytywanie

Obracam się i staję przy Surface z drugiej strony (lada za moimi plecami).

09_Przechwytywanie

Obracam się i idę w głąb korytarza, mając po prawej stronie ladę.

10_Przechwytywanie

Idę dalej, po lewej ukazują się schody.

11_Przechwytywanie

Wchodzę po tych schodach na górę.

12_Przechwytywanie

Idę dalej.

13_Przechwytywanie

I jeszcze dalej.

14_Przechwytywanie

Przybliżam się do okna.

15_Przechwytywanie

Odwracam się. Znowu wszechobecne plazmy i laptopy –;) Miłe halogeny.

16_Przechwytywanie

Odsłona numer dwa. Pozwoliłem sobie salę z obrazem Scotta i Silverlight’a uczynić początkiem mej wędrówki.

04_Przechwytywanie

Podchodzę do obrazu Silverlight i próbuję wyglądać przez wąskie okna na świat.

05_Przechwytywanie

Wycofuję się do holu (któremu nie zrobiłem screenhota) i kieruję się ku schodom.

06_Przechwytywanie

Wchodzę po schodach (tryb pełnoekranowy).

08_Przechwytywanie

Wszedłem na kondygnację górną, widać w górze niebo, a w dole hol.

07_Przechwytywanie

Innych przykładów nie będę już tutaj opisywał, by ten post nie był zbyt długi, ale opisałem je tutaj. Zachęcam do zabawy! Uwaga praktyczna dla 3D Housebuilder - na dzień dobry po uruchomieniu będziemy zasypywani wyjątkami, jeśli nie mamy ustawionej kultury US, czyli mamy np. polską (chodzi zdaje się o “.” zamiast “,” dla liczb zmiennoprzecinkowych).

Słabo?!  Widać, że nowy Silverlight śmiało może stać się środowiskiem do pisania gier 3D. Nie analizowałem tych interesujących przykładów od strony technicznej, jak znajdę czas, by przyjrzeć się im bliżej, to napiszę o tym w jednym z kolejnych postów.

niedziela, 8 maja 2011

Silverlight 5 Beta - runda pierwsza!

Zgodnie z zapowiedzią z poprzedniego posta opublikowałem swoją rozpiskę o Silverlight 5. Umieściłem ją w całej okazałości na swoim drugim blogu, który postanowiłem po pewnej przerwie reaktywować. Rozpiska w sumie okazała więcej niż zwykłą rozpiską, bo obfituje w pogrupowane tematycznie linki oraz zawiera sample, jakie sobie potworzyłem, by wypróbować różne nowości i czegoś przy tej okazji się nauczyć (w kilku przypadkach odstąpiłem od tworzenia dysponując niezłymi przykładami z sieci). Uzyskałem całkiem spore pokrycie, choć takie grube tematy jak grafika 3D czy PivotViewer zostawiłem sobie na inną okazję.

Skoro już się naprodukowałem o sporej części SL5 w ramach Reactivation!!! New features in Silverlight 5 Beta + Links + Samples - Part I (co prawda nie opisałem tego wszystkiego, co wyczytałem z tych linków, ale wtedy to mogłaby powstać już z tego książka albo co najmniej kilka artykułów), tutaj nie mam ambicji pisania o wszystkim i skupię się na kilku, najbardziej kręcących mnie przykładach.

Zacznijmy od multimediów. W przypadku SoundEffect na warsztat wziąłem swój wcześniejszy przykład z Windows Phone 7. Dynamiczna korekta dźwięku nadal działa! Nawet lepiej, bo nie muszę jawnie emulować pętli gry.

SoundEffect_TrickPlay

Na drugi rzut poszedł Trick Play. Na załączonym zdjęciu odtwarzam sobie nagranie video ponad 2 razy szybciej niż normalnie, można też zwalniać. Jedynym mankamentem jest to, że w Becie wyłącza się audio przy szybkości odtwarzania innej niż 1.

No i teraz pora na zaufane aplikacje. W przypadku hostowania w przeglądarce jest to trochę przekombinowane, bo aplikacja i tak musi być skonfigurowana jako … out of browser (jeśli chcemy możemy ukryć opcję instalacji z prawego menu). Inna sprawa, że w Becie ta funkcjonalność działa wyłącznie w Windows. Komunikat pokazywany przez kontrolkę WebBrowser sugeruje, że potrzebujemy przeglądarki Internet Explorer.

Jeśli uruchomimy aplikację za pomocą Visual Studio, możemy się już cieszyć rozszerzoną funkcjonalnością w przeglądarce. Ale hola, nie o to chodzi!  W typowych dla  klienta warunkach aplikacja nie jest hostowana na adresie localhost czy 127.0.0.1 i wtedy możemy zobaczyć to, co na poniższym screenshocie.

Trusted_1_NotElevated - Copy

Aby cieszyć się hostowanym HTML w aplikacji Silverlight w przeglądarce, musi być ona podpisana poprawnym certyfikatem, a w rejestrze związanym z Silverlight musi być ustawiony wpis zezwalający na uruchamianie aplikacji w przeglądarce. Mike Taulty wyczerpująco krok po kroku opisał wszystkie czynności na swoim blogu. Nie jest to trudne do skonfigurowania i aplikacja działa z większymi uprawnieniami. Pewną ciekawostką jest, że – przynajmniej obecnie – okienko notyfikacji działa także wtedy, kiedy aplikacja wykonuje się w przeglądarce!

Trusted_1_Elevated3 - Copy

Aha, uporządkujmy jeszcze jedną sprawę. Zaufane aplikacje działające w przeglądarce nie są dokładnym odpowiednikiem zaufanych działających poza przeglądarką. Po pierwsze są warunkiem na hosting HTML-a (poza przeglądarką nie potrzebujemy do tego większych uprawnień), nie wspierają funkcjonalności typowych dla aplikacji out of browser (np. nie możemy używać klasy Window). Rzecz druga – przeglądarka może ograniczać rzeczywiste uprawnienia naszej zaufanej aplikacji (np. Internet Explorer w trybie protected). To proces przeglądarki ostatecznie hostuje naszą aplikację.

Pokazywany wyżej przykład zbudowałem na bazie swojego przykładu z czasów Silverlighta 4 (od tamtego czasu YouTube wprowadziło restrykcje i zastąpiłem je Channel 9). Z tamtych czasów pamiętam też bardzo fajną aplikację Microsoftu z puzzlami. Pozwoliłem ją sobie przerobić na nowszą wersję Silverlight, by działała także w przeglądarce.     

Puzzle - Copy

Zaufane aplikacje w Silverlight 5 mają nieograniczony dostęp do całego systemu plików, także w przeglądarce. W Silverlight 4 poza przeglądarką … też było to możliwe, tylko trzeba było “natrudzić się” z użyciem komponentów COM.

Do sprawdzenia tej funkcjonalności posłużyła mi przeróbka mojego drugiego przykładu z czasów Silverlight 4. Obrazki teraz są wczytywane z dowolnej lokalizacji wpisywanej w polu tekstowym. Jako ciekawostkę mogę powiedzieć, że przypadkiem natrafiłem na swoim laptopie na zdjęcia, które robiłem 2 lata temu przy okazji mojej wyprawy na spotkanie grupy w Katowicach i to one znalazły się na poniższym screenshocie.

Trusted_2 - Copy

Na koniec zostawiłem rzecz – moim zdaniem - wielce efektowną w porównaniu do Silverlight 4. Ostatnio omawiany przeze mnie przykład przerobiłem na aplikację z wieloma natywnymi oknami (zawartość każdej z zakładek trafiła na oddzielne okno). Aplikacje w Silverlight mogą więc coraz więcej! Warto to podkreślać, bo nadal dla wielu osób Silverlight kojarzy się z wtyczką do przeglądarki i substytutem HTML. Czy w HTML5 możemy pisać takie aplikacje? 

MultipleWindows

To nie wszystko! Postanowiłem iść na całość i opracowałem wersję z własnoręcznie ostylowanymi oknami. Wzór okna wziąłem z przykładu z czasów Silverlight 4, ale przepisałem do na bardziej uniwersalny sposób, by współdzielić kontrolkę pustego okna pomiędzy wszystkimi okienkami. Taka aplikacja najlepiej pokazuje różnicę między HTML a Silverlight.

MultipleWindowsChrome

Kończę na dzisiaj pisanie, bo … zaczynam prace nad materiałem na kolejnego posta.

piątek, 29 kwietnia 2011

Subiektywne spojrzenie na sesje MIX11

Trudno byłoby obejrzeć 120 sesji (o ile mnie pamięć nie myli), więc musiałem dokonać jakiegoś wyboru. Zarówno wybór, jak i opinie nie będą tutaj obiektywne, reprezentuję obóz związany z Silverlight i Windows Phone –:) Nie oznacza to, że napiszę tylko o sesjach związanych z tą tematyką, ale będą stanowiły one najliczniejszą grupę w podsumowaniu.

Zacznijmy od najlepszych (spośród obejrzanych/przejrzanych przeze mnie) pozycji.

W kategorii Windows Phone są to:

W kategorii Silverlight są to:

Przejdźmy teraz do sesji, które nie są dla mnie topowe, ale mogą poszerzyć horyzonty, przynajmniej część z nich warto obejrzeć:

Sesje, które nie wzbudziły we mnie większego entuzjazmu lub wydały mi się dość słabe:

Do tej całej rozpiski załączam plik, w którym robiłem oceny i krótkie komentarze do poszczególnych pozycji. Nie obejrzałem wszystkiego w 100%, co zamierzyłem, trochę sesji w końcu sobie odpuściłem –:)

Ten post napisałem by jakoś utrwalić swoje subiektywne opinie o MIX 11, by gdzieś w szufladzie nie zaginęły, jak było w przypadku poprzednich eventów. Od połowy tego tygodnia jestem myślami w szczegółach Silverlight 5, ale o tym będą już inne posty.

poniedziałek, 18 kwietnia 2011

Mango i Silverlight 5 Beta !!!

Zainspirowany nowościami na MIX 11 postanowiłem reaktywować szybko bloga (a także drugiego w późniejszym czasie). Dla mnie najbardziej istotne są Mango (kodowa nazwa następnej wersji Windows Phone) oraz Silverlight 5 Beta. Obejrzałem na razie blisko 30 nagrań (robocze notatki w postaci screenshotów), z czego większość na temat tych dwóch zagadnień.

Postanowiłem sobie roboczo spisać nowe funkcjonalności i zmiany w Mango:

mangoSystem operacyjny

  • 16 dodatkowych języków (w tym polski)
  • Wyszukiwanie na liście aplikacji
  • Multitasking
  • Search Extras
  • IE9 z HTML5
  • Zarządzanie aplikacjami w tle
  • Lepsza wydajność (w tym nowy wątek Touch Thread)

Multitasking

  • Szybkie przełączanie między aplikacjami
    • aplikacja po dezaktywacji najczęściej pozostaje w pamięci (tylko to, zasoby są wtedy odpinane, wątki i timery usypiane)
  • Serwisy w tle
    • ScheduledActionService
      • Alarmy
      • Przypominacze
    • Zune Service (audio w tle - przeglądarka, własna aplikacja, obsługa panelu audio poprzez agenta audio)
    • BackgroundTransferService (pobieranie i upload)
  • Agenci w tle
    • periodic (PeriodicTask + ScheduledActionService)
    • on idle
  • Zarządzanie zasobami (na poziomie frameworka - odpinanie, przypinanie)

Taski

  • Numer telefonu
  • Adres
  • E-mail
  • Bing Map
  • Dzwonki

Sensory i kamera

  • GPS
  • Akcelerometr
  • Kompas
  • Żyroskop
  • Motion Sensor (na podstawie innych sensorów)
  • Kamery
    • Scenariusze
      • rozszerzona rzeczywistość
      • analiza obrazu np. wykrywanie kodu kreskowego
      • robienie zdjęć
      • nagrywanie video i audio
    • Nagrywanie
    • Bezpośrednia obsługa (w tym przycisku, focusa, flash, możliwość napisania własnej aplikacji do robienia zdjęcia/nagrania filmu, zdjęcie można zapisać w kategorii kamery)
    • 2 sposoby obsługi
      • PhotoCamera
      • Silverlight 4 API

Dostęp do danych

  • Lokalne baza danych na SQL CE
    • Generacja i upgrade bazy z poziomu kodu
  • Dostęp do kontaktów i spotkań
    • Tylko do odczytu
    • Asynchroniczne wyszukiwanie
  • LINQ to
    • SQL (DataContext, generacja bazy z poziomu kodu - tabele, kolumny, klucze, indeksy)
    • User Data
    • OData

Kafelki

  • API do lokalnej modyfikacji (pełna kontrola nad wszystkimi parametrami)
  • Wiele kafelków dla danej aplikacji (kafelki kontekstowe do danej strony w aplikacji, programowe dodawanie/usuwanie, dedykowane zdarzenia)
  • Kafelki dwustronne (strona background)

Notyfikacje push

  • Tile (dodatkowe pola dla strony background, precyzyjne wskazywanie kafelka po adresie)
  • Deep toast (wskazanie adresu do otwarcia w danej aplikacji)
  • Wydajność
  • Niezawodność
  • Limit powiększony do 30 endpointów
  • Przykłady dla Azure

Silverlight

  • Silverlight 4
    • engine
    • ogólne ulepszenia (style niejawne, rozszerzenia bindingu, komendy)
    • tekst (IME, zdarzenia TextBox)
    • media (obsługa kamery i audio, VideoBrush, poprawione oszczędzanie baterii przez MediaElement)
    • kontrolki (lepsza wydajność, RichTextBox, ViewBox, WebBrowser z IE9, ulepszenia w toolkicie)
    • schowek
    • komunikacja
      • sokety (TCP, UDP Unicast i Multicast)
      • inne (dostęp do pełnego nagłówka, obsługa wątków przez WebClient)
  • Ulepszenia w nawigacji
    • Możliwość usunięcia wpisu back z dziennika (co jest potrzebne w niektórych przypadkach)
  • Wsparcie dla wszystkich języków na telefonie
  • Podkreślanie niepoprawnych wyrazów na czerwono
  • Gesty na poziomie zdarzeń (Tap, DoubleTap, Hold)
  • Media (tryb 32 bit/pixel – co poprawia rysowanie gradientów, domyślnie 16)
  • Integracja z XNA
    • na poziomie strony i elementu
    • zaawansowane przypadki (nawigacja, texbox + klawiatura, wyświetlanie obrazu video i z kamery)
  • Wydajność (m.in listy)

Extras

  • Search
  • Muzyka
  • Zdjęcia

Narzędzia

  • Emulator
    • Emulacja akcelerometru i lokalizacji
    • Obsługa multi-touch
    • Screenshoty
    • Ingestion tool
    • Odtwarzanie H.264, AAC
    • Emulacja pamięci bardziej zbliżona do urządzenia
  • VS 2010
    • Multi-targeting
    • Nowy szablon dla multitaskingu
    • Debugowanie agentów w tle
    • Isolated Storage Explorer
    • Profiler (analizator wydajności)
  • Expression Blend
    • Multi-targeting
    • Wsparcie dla Visual Basic
    • Blend SDK
      • PathListBox
      • Shapes
      • Nowe zachowania
    • SketchFlow for Windows Phone (działa na desktopowym Silverlight)

Inne

  • ShellToast (możliwość wywołania systemowego komunikatu z ikoną, napisem i adresem który ma otwierać)
  • Visual Studio Async CTP
  • Klasa DeviceStatus (parametry urządzenia i aplikacji)
  • Klasa dla systemowego paska postępu (możliwość włączenia na pasku systemowym) 
  • MarketPlace Services
  • Pickers (?)

MarketPlace

  • Nowe formy dystrybucji
    • Beta (bez certyfikacji, do 100 osób, na 90 dni, kontrola dostępu, bez aktualizacji, darmowe)
    • Private (link wysyłany do wybranych ludzi, aplikacja nie jest znajdowana w publicznej wyszukiwarce, bez kontroli dostępu, darmowe/płatne)
  • Inne ulepszenia

O Silverlight 5 Beta napiszę później. Ten post będzie z pewnością aktualizowany (m.in w celu wprowadzania poprawek, uzupełnień).

poniedziałek, 18 października 2010

Windows Phone 7 RTM - wybrane zagadnienia cz.2

W ramach tego postu chciałbym się podzielić różnymi ciekawostkami i spostrzeżeniami. Z jednej strony w większości przypadków dotyczą one funkcjonalności dłużej znanych, ale spojrzymy tu czasem na nie od bardziej wysublimowanej strony. Znajdzie się też kilka całkowicie nowych wstawek z RTM.

Poniżej udostępniam moje wcześniejsze materiały z Windows Phone 7 dotyczące funkcjonalności sprzed bety, zaktualizowane, by działały poprawnie w wersji finalnej. Po drodze zaktualizowałem je do bety, ale nie zdążyłem opublikować, o czym pisałem niedawno.

Launchers & choosers

Wróćmy na chwilę do tematyki launcherów i chooserów. Nie wszystkie da się bezproblemowo przetestować na emulatorze. Potwierdzam za dokumentacją, że nie można wysyłać maili (nawet w sensie otwarcia ich w programie pocztowym), bo nie można skonfigurować konta pocztowego, nawet przy odblokowanym obrazie. Mogę też potwierdzić, że MediaPlayerLauncher ma problemy z wyświetleniem obrazu video na emulatorze (ewentualnie może nam coś mignąć). Co do tasków związanych ze sklepem, udało mi się odpalić MarketplaceHubTask i MarketplaceSearchTask.

02_MarketPlaceHub04_MarketPlaceSearch

W przypadku MarketplaceDetailTask w stosunku do bieżącej aplikacji i  MarketplaceReviewTask przy próbie wyświetlenia interfejsu dostaję informacje o błędzie. Dokumentacja informuje o problemach z tym drugim, o pierwszym pisze że nie ma różnic w porównaniu z telefonem. Task szczegółów pewnie nabierze sensu jak nasza aplikacja będzie opublikowana na MarketPlace, jak sądzę. Z pewnością warto rzucić okiem na aktualną zawartość sklepu, w przypadku aplikacji opatrzonego notą o testowym działaniu do 21 października. 

Przykład: WP7TasksDemo

Gesty

O gestach mówi się od pierwszego CTP narzędzi dla WP7, mamy na poziomie platformy działające zdarzenia manipulacji. Wersji finalnej towarzyszy ponadto toolkit, w którym zapewniono detekcję konkretnych gestów (dla dużej części wystarczy obsłużyć jedno zdarzenie). Moją uwagę zwróciła obsługa rotacji. Do tej pory możemy spotkać adnotację w dokumentacji, że rotacja nie jest obsługiwana (w przykładzie z Mixa też jej nie było). Oglądałem jednak ostatnio na Channel 9 filmik z premiery toolkita i na żywym telefonie zostały pokazane obroty. Ze swojej strony mogę potwierdzić, że w emulatorze też całkiem dobrze to działa (nawet jeśli nie dysponuje się ekranem dotykowym). 

05_Gestures_01

Dla wyjaśnienia - czerwone punkty, to wskaźniki dwóch myszy, za pomocą których testowałem gest pinch and stretch. Nie mając ekranu dotykowego można na Windows 7 zainstalować odpowiedni sterownik. W kwietniu opublikowałem na vimeo filmik, który dokładnie pokazywał, jak włączałem obsługę wielu myszek.

Przykład: WP7DemoApp

Notyfikacje push

Tu tylko napiszę, że pojawiła mi się pewna zagadka w działaniu notyfikacji toast w przykładowej aplikacji z WP7 Training Kit. Kiedy aplikacja subskrybująca jest wyłączona, wszystko jest w porządku. Natomiast gdy wyślemy notyfikację w trakcie działania aplikacji, to … następuje jej wyłączanie (pamiętam,że w Becie też mi się tak działo). Okazuje się, że dostaję wyjątek: Data at the root level is invalid. Co ciekawe w moim odświeżonym WP7DemoApp, gdzie w bardzo prosty sposób obsługuję notyfikacje toast, wszystko działa dobrze zarówno przy włączonej, jak i wyłączonej aplikacji. Mam nadzieję, że uda się to wyjaśnić. Być może jest jednak jakaś drobna różnica w formacie wysyłanej wiadomości, której nie dostrzegłem? Założyłem na forum WP7 wątek z tym tematem.

ShellTileSchedule

Jak możemy aktualizować obrazek w tile bez notyfikacji push? Od wersji finalnej możemy wykorzystać ShellTileSchedule. Funkcjonalność jest o tyle ciekawa, że … trudno ją przetestować. Najmniejszy okres to 1 godzina (ograniczenie systemu operacyjnego z uwagi na wydajność) i tyle trzeba nieraz odczekać, żeby zobaczyć efekt. W przykładowej aplikacji z WP7 Training Kit udało mi się zaobserwować po godzinie efekt podmiany obrazka:

03_ScheleTileSchedule_2

Na podsumowanie powiem, że… dokumentacja msdn, na którą się tak często powołuję została ostatnio odświeżona i sygnowana datą 7 października. Zmieniły się nieco szczegóły lokalizacji tytułu aplikacji, dodano dobry przykład integracji z Music + Videos hub (czego zawsze brakowało), lepiej udokumentowano niektóre, czasami dość istotne zagadnienia.

W związku z aktualizacją informacji na temat integracji z hubem multimedialnym dokonałem małej aktualizacji swojego ascetycznego przykładu z odtwarzaczem (MusicVideosHubAppDemo).

01_VMH

Zaktualizowaną wersję można pobrać tutaj. Mimo doprecyzowania przez dokumentację przekazywania do aplikacji informacji o uruchomieniu jej z tile i nazwy utworu i tak pozostało mi kilka niejasności. Dlaczego nie wyświetlają się z automatu tytuły utworów na tile’ach? Dlaczego na własnoręcznym tile aktualnego utworu pisze ciągle Paused i nie widać czasu? (jak się nic nie ustawi to domyślna reprezentacja to potrafi). Sporadycznie zdarzało mi się, że tło na tym tile mi się nie odświeżało (być może przy szybkich zmianach odtwarzanego utworu i przechodzenia z aplikacji na huba i odwrotnie). Zobaczymy jak to zadziała na fizycznym telefonie (bo emulator z odblokowanym obrazem nie może być do końca wyznacznikiem).

Ostatnio sporo dzieje się lub będzie się działo w tematyce WP7 na różnych frontach (samych urządzeń, MarketPlace, różnych frameworków). Z pewnością więc nie zabraknie mi tematów na kolejne posty -:)

poniedziałek, 11 października 2010

Windows Phone 7 RTM - wybrane zagadnienia

W dzień premiery systemu WP7 … nadrabiam zaległości w pisaniu postów o platformie i narzędziach. W przeddzień MTS zapowiedziałem, że napiszę dokładniej o wybranych tematach dotyczących wersji finalnej. Miałem tu na myśli zmiany w API oraz nowe informacje w oficjalnej dokumentacji, które zwróciły moją uwagę. Sprawdziłem niemal wszystko, co zaowocowało umieszczeniem 2 plików zip. Teraz… opiszę ich zawartość, omawiając przy okazji różne zagadnienia. Może to stanowić też pewne uzupełnienie do moich wypowiedzi na temat developmentu na stoisku ATE, gdzie często nie schodziliśmy do takich szczegółów. Zaczynajmy!

1. Nowe kontrolki (SDK)

Panorama

Panorama to jak wiadomo jeden z kluczowych filarów nowoczesnej koncepcji interfejsu użytkownika w WP7, bez trudu odnajdziemy ją w hubach i niektórych aplikacjach (np. Office). Od wersji finalnej mamy standardową kontrolkę, wcześniej można było korzystać m.in z rozwiązania z codeplex. Tutaj wziąłem na warsztat kluczowe elementy swojej wczesnej aplikacji pokazywanej na VSTL w maju w Krakowie

Panorama_01

Dla istniejących rozwiązań migracja nie jest trudna, ale ja sobie stworzyłem widok panoramy całkiem na nowo. VS 2010 i Blend 4 mają szablony projektów takiej aplikacji z przykładowymi view modelami. W istniejących projektach można skorzystać z szablonu strony z panoramą lub oczywiście umieścić samą kontrolkę na istniejącej stronie. Kontrolka Panorama ma bardzo dobre wsparcie w designie. Zaznaczając elementy PanoramaItem dostajemy podgląd odpowiedniej części panoramy.  Nie muszę tu chyba wspominać, że korzystając z Blend mamy standardowe udogodnienia w postaci szybkiego tworzenia przykładowych danych (także view modeli) czy usprawnień dla data bindingu z drag & drop. Dzięki temu  jesteśmy w stanie zrobić szybko i wygodnie panoramiczny widok (i nie tylko).

Panorama_02

Przykład: PanoramaAndPivotDemo

Pivot

Kontrolkę Pivot również otrzymujemy obecnie w standardzie, z analogicznym jak Panorama wsparciem. Panorama i Pivot znajdują się u mnie w tej samej aplikacji. Jako ciekawostkę powiem, że nadal używam kontrolki Rating z SL3 Toolkit.

Pivot_01Pivot_02

Przykład: PanoramaAndPivotDemo

Bing Map

Kontrolka Map obsługuje m.in różne tryby prezentacji, zoom, pushpins (chmurki opisujące punkty), krzywe (przydatne np. przy prezentacji ustalonej drogi) i powierzchnie.  Doczekaliśmy się oficjalnej wersji na WP7 (wcześniej można było próbować używać wersji dla desktopowego Silverlight, ale nie wszystko działało). Screenshoty aplikacji z mapą pokazywałem w poście przed MTS, więc tutaj ograniczę się do jednego. Jak przytrzymamy dłużej palec w danym punkcie ekranu (gest Touch and Hold), to zostanie dodana nowa chmurka wyświetlająca swoje położenie geograficzne. Obsługę gestu zrealizowałem z użyciem nowo powstałego Silverlight Toolkit for WP7 (o którym napiszę poniżej).

BingMap_02x

Przykład: MapNavigator

02. Silverlight Toolkit for WP7

W finalnym wydaniu został wydany po raz pierwszy toolkit, zawierający wiele kluczowych rozszerzeń.

GestureService/GestureListener

Za pomocą standardowych zdarzeń manipulacji, musimy sami zadbać o wykrywanie poszczególnych gestów. A może chcemy szybciej i prościej? GestureListener (w GestureService) obsługuje nam zdarzenia: Tap, DoubleTap, Hold (wykorzystuję w aplikacji z mapą), Drag (DragStarted, DragDelta, DragCompleted), Flick and Pinch (started/delta/completed). Dostajemy gotową obsługę dla prostszych gestów, bardziej złożone wykryjemy korzystając więcej niż z jednego zdarzenia. Adam Kinney napisał bardzo dobrego posta na ten temat. 

Przykład: MapNavigator 

ContextMenu 

Wygląda i zachowuje się tak samo jak kontrolka, którą widzimy w systemie operacyjnym (np. przy okazji przypinania skrótu do aplikacji). Zachowanie jest dość wyrafinowane. Jeśli odpowiednio długo przytrzymamy palec, to … cały ekran się nam nieco ugnie, po czym wyskoczy nam menu. Kontrolka została ciekawie zaimplementowana (animacja screenshotu ekranu z WriteableBitmap i animacja samego menu), wiąże się z tym też trochę ograniczeń. Menu kontekstowego użyłem w przykładzie z panoramą i z pivotem.

ContextMenu_01

Przykład: PanoramaAndPivotDemo

DatePicker

Standardowy DatePicker nie jest wspierany w ramach SDK dla WP7, zresztą nie pasowałby do specyfiki interfejsu użytkownika. W aplikacjach dostarczanych wraz z systemem operacyjnym możemy zaobserwować wybieranie daty poprzez otwarcie dodatkowej strony, na której dokonujemy wyboru (np. na formularzu spotkania). Kontrolkę o identycznym wyglądzie i zachowaniu oferuje teraz nam toolkit. Wykorzystanie standardowej nawigacji powoduje, że musimy zachować ostrożność. W ogólnej obsłudze nawigacji musimy ignorować strony implementujące interfejs IDateTimePickerPage. Wykorzystanie interfejsu zapewnia nam uniwersalność, twórcy kontrolki pozwalają na zdefiniowanie własnej strony, z której będzie korzystać DatePicker. Dokładnie opisuje to David Anson na swoim blogu. Kontrolkę DatePicker wykorzystałem na formularzu edycji produktu w aplikacji z panoramą i pivotem.

DatePicker_01DatePicker_02

Przykład: PanoramaAndPivotDemo

TimePicker

Odznacza się podobnymi właściwościami i zachowaniem jak DatePicker, więc nie będę się na jej temat rozpisywał.

ToggleSwitch

Kontrolka bedąca kompozycją labelki i suwaka o stanie On i Off, w zasadzie inna reprezentacja wizualna checkboxa. W systemie operacyjnym często możemy ją spotkać w ustawieniach. Toolkit dostarcza nam kontrolki o takim samym wyglądzie i zachowaniu. Wykorzystuję ją w przykładzie, gdzie eksperymentuję z lockowaniem ekranu (patrz niżej).

Przykład: IdleDetectionDemo

WrapPanel

Stary znajomy, którego chyba nie muszę  przedstawiać. Wcześniej można było używać wersji z toolkita dla Silverlight 3. Teraz zyskujemy pełną wygodę. WrapPanel wykorzystuję w aplikacji z panoramą i z pivotem.

Przykład: PanoramaAndPivotDemo

03. Cykl życiowy aplikacji

Co zmieniło się w cyklu życiowym?

Poprawiono debugging VS 2010 przy tombstoningu. Teraz po ubiciu procesu i przy reaktywacji debugowanie jest automatycznie wznawiane (w Becie pojawiał się czarny ekran i trzeba było ręcznie wznawiać tę czynność).

Uściślono, że deaktywacja nie musi jednoznacznie oznaczać tombstoningu w sytuacjach, gdy szybko naciśniemy przyciski Start i Back lub wywołamy większość chooserów (jeśli zasoby systemowe na to pozwalają). Dzięki temu zyskujemy większą płynność działania. Należy też pamiętać, aby przy deaktywacji nie czyścić danych na wypadek, gdyby aplikacja zaraz wznowiła działanie.

Doprecyzowano w oficjalnej dokumentacji zachowanie w przypadku zablokowania ekranu. Domyślnie w takim przypadku aplikacja ulega deaktywacji. Możemy jednak wyłączyć blokowanie ekranu (UserIdleDetectionMode) albo wymusić ciągłe działanie aplikacji przy zablokowanym ekranie (ApplicationIdleDetectionMode).

Dzięki zdarzeniom Obscured i Unobscured w PhoneApplicationFrame możemy wykryć zablokowanie ekranu i zmniejszyć zasoby używane przez aplikację w tym stanie.

Wydaje się, że do testowania blokowania ekranu koniecznie potrzebny jest fizyczny telefon. Dysponując emulatorem z odblokowanym obrazem mogłem ustawić czas, po którym następowała blokada, jednak wizualizacja nie wyświetlała daty i nie dała się później odblokować poprzez podciągnięcie ku górze palcem (w przeciwieństwie do opisu dot. wcześniejszej wersji na jednym z blogów).

LockScreen_01 LockScreen_02

W związku z tym, póki co w prezentowanym przykładzie zweryfikowałem jedynie wyłączenie blokowania ekranu dla danej aplikacji oraz zachodzenie zdarzenia Obscured. Jak już wyżej wspominałem, w interfejsie wykorzystałem kontrolkę ToggleSwitch z toolkita.

LockScreen_04

Przykład: IdleDetectionDemo

04. Lauchers & Choosers

W wersji finalnej za pomocą emulatora ze standardowym obrazem możemy przetestować wybieranie obrazków z kolekcji Pictures. Zauważyłem również predefiniowane kontakty. Do tematu wrócimy jeszcze w następnym poście.

Oczywiście należy pamiętać, że w przypadku wielu chooserów tombstoning może nie zachodzić.

Przykłady: PhotoExtrasAppDemo, SharePickerExtensibilityDemo

05. ShellTileSchedule

Daje możliwość okresowej aktualizacji tła tile w oparciu o wskazany serwis. Więcej w następnym poście.

06.Tilt Effect

Efekt “uginania się” kontrolki przy jej dotknięciu, znany z aplikacji systemu operacyjnego. Nie wchodzi co prawda w skład standardowego API, ale występuje w finalnej dokumentacji w formie przykładu. Użyłem go w aplikacji z panoramą i z pivotem. 

Przykład: PanoramaAndPivotDemo

07. Photo Extras

W wersji finalnej w trybie photo extras zdjęcie pozyskujemy za pomocą MediaLibrary i tokenu przekazywanego w adresie (w wersji Beta odbywało się to przy użyciu IsolatedStorage i nazwy pliku).

Przykład: PhotoExtrasAppDemo

08. Share Picker Extensibility

Funkcjonalność opisana w dokumentacji wersji finalnej, podobna do Photo Extras. Również w tym przypadku po wybraniu odpowiedniego menu z poziomu standardowej przeglądarki obrazków, nastąpi uruchomienie naszej aplikacji i zostanie przekazane jej zdjęcie. Zadaniem aplikacji jest wysłanie zdjęcia do danego serwisu.

W menu kontekstowym zdjęcia widzimy opcję share… (zobaczymy ją też w menu w widoku pojedynczego obrazka).

SharePhoto_01

Po wybraniu opcji share… pojawia się nam lista aplikacji, za pośrednictwem których możemy wysłać zdjęcie do różnych serwisów. Jeśli do naszej aplikacji dodamy plik XML o nazwie odpowiadającej pewnemu numerowi Guid (szczegóły w dokumentacji), to nasza aplikacja zostanie dodana do listy (w moim przypadku mc)

SharePhoto_02

Po wybraniu aplikacji z listy nastąpi jej uruchomienie oraz zostanie przekazane jej zdjęcie (za pomocą MediaLibrary i tokenu, analogicznie jak w przypadku Photo Extras).

SharePhoto_03

Przykład: SharePickerExtensibilityDemo

09. DeviceExtendedProperties

W finalnej dokumentacji możemy odnaleźć opis klasy DeviceExtendedProperties, która pozwoli nam odczytać różne informacje na temat sprzętu, oprogramowania oraz zużycia pamięci RAM przez naszą aplikację (co jest zalecane przy testach).

Trial_03 - Copy

Przykład: DeviceInfoAndTrialDemo

10. Guide (Trial Mode)

Jak przetestować funkcjonalność trial w swoich aplikacjach?

Trial_01 - Copy

Z pomocą może nam przyjść klasa Guide z XNA Framework. Potrafi m.in zasymulować proces kupna pełnej wersji aplikacji łącznie z wyświetleniem testowego okna dialogowego.

Trial_02 - Copy

Przykład: DeviceInfoAndTrialDemo

11.Lokalizacja tytułu

W finalnej dokumentacji podano sposób na lokalizację tytułu aplikacji na liście i w tile (co ciekawe wymagana jest budowa dll-ki C++ Win32).

12. Narzędzia

Pozwolę sobie jedynie wyliczyć zmiany w Visual Studio 2010 czy Blend 4 dla WP7.

Visual Studio 2010

Nowe szablony projektów i elementów projektów (stron) dla kontrolek Panorama i Pivot. W pełni zautomatyzowane wsparcie debugowania aplikacji przy ich deaktywacji i reaktywacji.  

Expression Blend 4

Nowe rodzaje projektów i ich elementów dla Panorama i Pivot. Przy okazji chciałbym wspomnieć, że stosunkowo niedawny Service Pack 1 oprócz wsparcia dla Windows Phone 7  (i różnych poprawek) dodaje import plików Adobe FXG.

Na zakończenie podam kilka linków (głównie na temat finalnej wersji platformy i narzędzi dla WP7, ale nie tylko):

poniedziałek, 4 października 2010

MTS 2010, jak szukałem drogi z WP7 i coś ponadto

Pragnę zaprosić jutro wszystkich zainteresowanych do stoiska ATE z kategorii Windows Phone na konferencji MTS 2010 w Pałacu Kultury. Jako ATE (Ask The Expert) postaram się udzielić wyczerpujących informacji przydatnych dla developerów Windows Phone 7. Być może będzie nawet jakiś “żywy” telefon, ale nie jest to przesądzone.

Pozostając przy samym temacie Windows Phone 7, ostatnio jeszcze przed wydaniem finalnych narzędzi obiecywałem, że przygotuję aktualizacje wcześniejszych materiałów, opublikowanych przed ostatnim postem. Miałem je praktycznie przygotowane, ale trochę się rozchorowałem, a potem była już wersja finalna. Od połowy września zdążyłem się już z nią bardzo wnikliwie zaznajomić, eksperymentując z prawie wszystkimi nowo wprowadzonymi funkcjonalnościami (włącznie z Toolkitem) i uważnie wyłapując różnice.

W nowościach nie skupiam się tylko na tych najbardziej oczywistych i popularnych, ale także na tych bardziej wysublimowanych, o których rzadziej się mówi (można je wyłapać np. studiując wnikliwie dokumentację). Dokładnie przedstawię je w kolejnych postach, natomiast już dziś mogę udostępnić źródła moich ostatnich eksperymentów.

Part 4 zawiera całkowicie nowe funkcjonalności, wprowadzone wraz z wersją finalną (wszystkie za wyjątkiem kilku drobnych). Natomiast Part 3 stanowi update do przykładów z ostatniego posta. To wszystko opiszę dokładnie w następnym … odcinku . W kolejnym opublikuję materiały z którymi nie zdążyłem przed wersją finalną (Part 1 i 2 okraszone w miarę potrzeby drobniejszymi nowościami).

Na koniec dzisiejszego postu … wspomnę jak można sobie poszukać drogi na mapie. Można tradycyjnie, ale można też … z użyciem Windows Phone 7. Z myślą o swoim wyjeździe na MTS wziąłem na warsztat samplową aplikacyjkę z  Training Kita, przy czym pisałem ją sobie od początku, miejscami po swojemu (np. zamiast helperów do toucha użyłem obsługi gestów z Toolkita).

Jutrzejsza konferencja odbywa się tutaj:

BingMap_01x

Interesująca mnie droga wygląda następująco:

BingMap_05xx

Wskazówki, co do mojej trasy mam tutaj:

BingMap_06xx

Do zobaczenia na MTS !

czwartek, 9 września 2010

Windows Phone 7 Beta - cz. 3

W sumie trochę nie pisałem, więc postanowiłem teraz napisać kilka postów o Windows Phone 7.  Sporą część sierpnia bawiłem się wersją Beta, więc z pewnością dysponuję materiałem, z którego coś na post się nada. Różne kawałki kodu pisane, jakie powstały dla wypróbowania różnych funkcjonalności pogrupowałem sobie na 3 części. Zacznijmy dziś od … końca, czyli od udostępnionych funkcjonalności od wydania Beta, w tym sporo takich, które można zobaczyć w działaniu jedynie na fizycznym telefonie albo … odblokowanym emulatorze.  Post na temat części nr.1 i nr.2 (jak działają obecnie podstawowe i bardziej zaawansowane funkcjonalności wprowadzone przed Betą) napiszę wkrótce.  Po 16 września (dzień premiery finalnej wersji ze stosunkowo niewielką liczbą zmian + 3 nowe istotne kontrolki) oczywiście pomyślimy o kolejnych postach. 

Przegląd sampli bardziej niebanalnych zaczynam od szkicu prostej konsoli, za pomocą której można zmieniać głośność, rozkład kanałów na lewy i prawy oraz pitch.  Szczególnie ta ostatnia możliwość dostarcza dużo radości, nawet przy zapętleniu dość melancholijnej muzyki, którą wybrałem sobie do zapętlenia. Od strony technicznej efekty dźwiękowe realizuje XNA użyta z poziomu Silverlight.

01_SoundEffects_01

Następna rzecz, którą chciałbym zaprezentować to tzw. aplikacja Photo Extras. Posiadacz telefonu (albo odblokowanego emulatora) przeglądając obrazki może z menu kontekstowego wybrać opcję extras.

02_PhotoExtras_02

02_PhotoExtras_03

Pojawia się wtedy lista i na niej link do naszej aplikacji, która zostanie otworzona i wczytane zostanie do niej przeglądane zdjęcie (oczywiście aplikację możemy też normalnie otworzyć i wczytać do niej obrazki przez chooser).

02_PhotoExtras_04

Jak telefon rozpozna, że nasza aplikacja jest takiego typu? Kluczowy jest tu plik Extras.xml dołączany do projektu, w warunkach produkcyjnych dodatkowo dojdą wymogi certyfikacyjne np. co do przeznaczenia aplikacji. Ciekawie rozwiązali przekazywanie fotografii do aplikacji w tym trybie – w wydaniu Beta wykorzystują parametr file w nawigacji do strony startowej aplikacji oraz Isolated Storage.

Co robi moja aplikacyjka Photo Extras? Jest to … maszyna-szarzyna-:)

02_PhotoExtras_05

Kolorowe fotki zamienia na czarno-białe, a potem umożliwia ich zapisanie do kolekcji obrazków na telefonie.

02_PhotoExtras_06

Teraz kolejny przebój, czyli … radio? Czy można słuchać radia nie mając fizycznego telefonu? Dysponując odblokowanym obrazem okazuje się, że … można. Do radia dostaniemy się przez huba music+videos. Jeśli wcześniej słuchaliśmy jakieś stacji, zostanie wyświetlona w historii odtwarzania.

04_FmRadio_01

Skacząc po częstotliwościach, na niektórych są puszczane … samplowe nagrania imitujące różne stacje radiowe !!!

04_FmRadio_02

Słuchać stacji radiowych możemy również z poziomu naszych własnych aplikacji, co sprawdziłem na poniższym przykładzie. BTW domyślnie radio się włącza, więc  jawnie go ustawiam w stan wyłączenia po starcie aplikacji.

04_FmRadio_03

Następną rzeczą, którą dziś pokażę będzie aplikacja integrująca się z hubem music+videos.  Na czym ta integracja polega? Nasza aplikacja może dodawać tile do huba z informacją o aktualnie odtwarzanym utworze,

05_VideoHub_02

odtworzonych ostatnio multimediach,

05_VideoHub_03

jak, i o nowo dodanych pozycjach multimedialnych.

05_VideoHub_04

Na podstawie faktu używania API do zarządzania pozycjami z utworami, nasza aplikacja jest klasyfikowana jako współpracująca z hubem multimedialnym. Dla celów testowych należy ustawić jeszcze pewną opcję w manifeście aplikacji wskazaną przez dokumentację. Natomiast w produkcji należy spełnić dodatkowe kryteria certyfikacyjne np. główne przeznaczenie aplikacji. Po zaklasyfikowaniu aplikacji powinna się wyświetlać jej nazwa na liście marquee w hubie music+videos.

05_VideoHub_05

Zarówno kliknięcie w tile każdego rodzaju wskazujący na zasób multimedialny lub na pozycję z listy marquee powoduje uruchomienie naszej aplikacji.

Na koniec małe wyjaśnienie – w tym wypadku poszedłem na skróty i mój player jest … atrapą (nie gra!). Klikanie na piosenkach dodaje je do historii odtwarzania, a dolny link dodaje fikcyjny zasób multimedialny.

Jako ostatnią przedstawię rzecz, która powinna być … pierwszą, jeśli chodzi o istotę nowych właściwości w Becie. Bez zdjęć,  multimediów czy radia jakoś przeżyć jeszcze można, ale bez dokładnej znajomości cyklu życiowego aplikacji już nie! Na telefonie różne aplikacje nie działają tak naprawdę równocześnie, zawsze wykonuje się tylko 1 proces, co pozwala oszczędzać ograniczone zasoby mobilnego urządzenia. Użytkownicy jednak oczekują zachowania znanego im z obecnych komputerów. Co tu robić, co tu robić? A może by tak… upozorować działanie aplikacji, tak żeby po powrocie do niej użytkownika, sprawiała wrażenie, że cały czas działała. I po to wymyślono stan zombi. Przy tzw. deaktywacji proces jest ubijany, ale zostają zapamiętane związane z nim dane (np. dane w polach na formularzu, kontrolka z focusem itp.). Przy tzw. reaktywacji mamy doczynienia z innym już procesem, który wczytał dane zapamiętane przy deaktywacji. Oczywiście oprócz deaktywacji i reaktywacji mamy także uruchamianie oraz zamykanie aplikacji (które wykluczają się z tymi pierwszymi).

Kiedy aplikacja jest usypiana a kiedy zamykana, kiedy następuje jej reaktywacja, a kiedy uruchomienie w całości od nowa? Są na to precyzyjne wytyczne. Jak naciskamy klawisz Back na stronie startowej aplikacji, to ją zamykamy. Jak naciśniemy Start, to ją tylko zamieniamy w zombi. Jeśli potem powrócimy skądś klawiszem Back do tej aplikacji, to ją reaktywujemy. Jeśli aplikacja zostanie uruchomiona z linka na ekranie startowym, to zawsze jest uruchamiana od nowa. Przy okazji widzimy, że aplikacja ze stanu zombi może się już nie wybudzić.  Należy mieć też świadomość, że jeśli używamy launcher-ów i chooser-ów, to tak naprawdę ich procesy wypierają proces aplikacji, która je wywołuje i przejdzie ona w stan zombi. Po wybraniu np. zdjęć z huba Pictures nastąpi reaktywacja naszej aplikacji.

Odpowiednia obsługa chooserów wyszczególniona w dokumentacji pozwala nam z automatu otrzymywać pochodzące z nich dane tak naprawdę w innym już procesie. Do naszych zadań pozostaje zapamiętywać i odtwarzać inne dane naszej aplikacji, tak by użytkownik niczego się nie domyślił. Ciekawie w tej wydaniu wymyślili z debugowaniem. Jeśli przejdziemy w stan zombi, to debugowanie się kończy, bo nie ma już procesu. Ale jeśli nastąpi reaktywacja aplikacji, to … zobaczymy czarny ekran na emulatorze! Nie, to nie pomyłka, to celowe działanie. Jest nam dany pewien czas, abyśmy włączyli debugowanie na naszym projekcie jeszcze raz, a wtedy debugger rozpozna reaktywację i znajdzie odpowiedni proces.

Deaktywacja aplikacji występuje też jeszcze w innych sytuacjach (wygaszacz ekranu, rozmowa itd). Póki co najwięcej wiemy o sytuacji z wygaszaczem. Można też ustawić tutaj pewną zmienną, aby aplikacja nadal działała pod wygaszaczem. Pokazywano to m.in na TechEd w czerwcu.

Aby dopełnić tematyki związanej z cyklem życiowym, należy wspomnieć o sposobach przechowywania danych. Do przechowywania danych przeznaczonych do ostatecznego zapisu można używać Isolated Storage. Do przechowywania danych tymczasowych wykorzystuje się dostarczoną przez Microsoft kolekcję na poziomie całej aplikacji lub kolekcję widoku pojedynczej strony.  

Większość tych zagadnień sprawdziłem na poniższym przykładzie z formularzem, którego dane możemy zlecić do ostatecznego zapisania. Wtedy dane na formularzu pojawią się, także przy zupełnie nowym uruchomieniu aplikacji. Jeśli aplikacja zostanie uśpiona a potem reaktywowana, to nawet niezapisane dane w polach są odtwarzane.

06_LifeCycle_01 06_LifeCycle_02

Przykłady z wszystkimi wyżej opisanymi zagadnieniami, a nawet jednym więcej - komunikacja OData -  można ściągnąć tutaj:

Na zakończenie przydatne linki związane z obecnym wydaniem WP7

Blogi

Fora

Nie dodałem, że w kwestii dużych nowości w Becie wchodzą też nowe narzędzia czy nowe możliwości w dotychczasowych np. znacznie lepsze wsparcie dla designu w Blend. Odnośnie Blenda mogę polecić blog zespołu Expression, Kirupy, Jeffa Wilcoxa oraz materiały video z TechEda 2010 i Windows Phone Design Days. W kilku miejscach zostały pokazane rzeczy, które nie zostały jeszcze upublicznione (jak kontrolki Pivot, Panorama czy wczytywania flików .fxg)