How to master?

Post on 15-Feb-2016

48 views 1 download

description

How to master?. Paweł Żochowski. pawel.zochowski@studentpartner.pl http://zozofromelk.wordpress.com/. Agenda. Mechanizmy dostępu do danych i sensorów Baza danych SQL CE Kontrolki do przedstawiania danych Fast Application Switching Multitasking Live Tiles Zarabiaj! Zakręć się. - PowerPoint PPT Presentation

Transcript of How to master?

How to master?

Paweł Żochowski

pawel.zochowski@studentpartner.plhttp://zozofromelk.wordpress.com/

Agenda

• Mechanizmy dostępu do danych i sensorów• Baza danych SQL CE• Kontrolki do przedstawiania

danych• Fast Application Switching• Multitasking• Live Tiles• Zarabiaj!• Zakręć się

LAUNCHERS AND CHOOSERSMechanizmy dostępu do danych i sensorów

Sposoby dostępu do danych

• Izolacja środowiska telefonu od aplikacji użytkownika

• Zapewnione proste metody i funkcje, niewymagające samodzielnego przedstawiania danych

• Zapewnienie bezpieczeństwa i spójności danych naszego klienta

Lista chooserów• Address Chooser Task for Windows Phone• Camera Capture Task for Windows Phone• Email Address Chooser Task for Windows Phone• Game Invite Task for Windows Phone• Phone Number Chooser Task for Windows Phone• Photo Chooser Task for Windows Phone• Save Contact Task for Windows Phone• Save Email Address Task for Windows Phone• Save Phone Number Task for Windows Phone• Save Ringtone Task for Windows Phone

Sposoby dostępu do sensorówi komunikacji

• Działanie sensorów niezależne od działania naszej aplikacji

• Brak możliwości ingerencji w wewnętrzne warstwy systemu

• Odczyt i zapis zawsze płynny i dobrze obsłużony– Obsługa map, telefonu, maili i SMS’ów (wraz z historią)– Odtwarzanie mediów

• Bezpieczeństwo prywatności naszego klienta

Lista launcherów

• Bing Maps Directions Task

• Bing Maps Task• Connection Settings Task• Email Compose Task• Marketplace Detail Task• Marketplace Hub Task• Marketplace Review Task• Marketplace Search Task

• Media Player Launcher• Phone Call Task• Search Task• Share Link Task• Share Status Task• SMS Compose Task• Web Browser Task

Demo

Launchers and choosers

PRZECHOWYWANIE DANYCHBaza danych SQL CE

Czym jest SQL CE

• Relacyjna baza danych oparta na plikach• Działa bardzo podobnie jak bazy MSSQL– Oczywiście trochę ograniczona

• Dostęp odbywa się przez LINQ to SQL

Różnice pomiędzy MSSQL a SQL CE

• SQL CE działa jako proces na telefonie, nie aplikacja klient-serwer

• Dostęp do SQL CE może odbywać się jedynie za pośrednictwem LINQ to SQL– T-SQL nie jest wspierany!

• Dostęp tylko z aplikacji wywołującej– SQL CE jest umieszczona w IsolatedStorage

Demo

SQL CE

PANORAMA & PIVOTKontrolki do przedstawiania danych

Metro UI Design Guidelines

• Metro to nie WP7!• Design czysty, lekki, prosty i szybki• Odpowiednie elementy do odpowiednich

zastosowań• Wrażliwość na dotyk

http://www.riagenic.com/archives/487http://msdn.microsoft.com/en-us/

library/hh202915(v=VS.92).aspx

Data Grid

• Nie stosuje się…

• Przypadki dozwolone: Tabela z danymi

Panorama

• Tylko orientacja pionowa– Jest opcja poziomej, ale się nie stosuje

• Listy oraz elementy poziome• Efekt paralaksy• Zastosowanie: Menu

Pivot

• Łatwiej zapisuje się stan kontrolki

• Lekka i niekoniecznie zasobożerna

• W obu orientacjach wygląda dobrze

• Zastosowanie: Zestawienie skategoryzowanych danych

Typografia

42pt20pt

11pt

9pt

Demo

Panorama & Pivot

FAST APPLICATION SWITCHINGSzybkie przełączenie się między aplikacjami

Demo

Fast Application Switching

Cykl życia aplikacji - uśpienie

running

deactivated

dormant

activated

Odpięcie zasobówZawieszenie wątków i timerów

Szybkie wznowienie aplikacji

Zapis stanuPrzywrócenie stanue.IsApplicationInstancePreserved== true

Cykl życia aplikacji - Tombstoning

running

deactivated

dormant Odpięcie zasobówZawieszenie wątków i timerów

Przywrócenie stanue.IsApplicationInstancePreserved == false

Resuming

.. .

Tombstone Najstarszej aplikacji

Tombstoned

activated

Methody i zdarzenia

25

Wznawianie działania aplikacji

• Obsługa zdarzenia aktywowania aplikacji sprawdza, czy stan został zachowany

private void Application_Activated(object sender, ActivatedEventArgs e){ if (e.IsApplicationInstancePreserved) { // Dormant - objects in memory intact } else { // Tombstoned - need to reload }}

Obsługa deaktywowania zasobów

Dezaktywacja aplikacji

PhoneApplicationPage.OnNavigatedFrom

PhoneApplicationService.Deactivated

Framework:Odpięcie zasobów

Framework:Zatrzymanie wątków i

timerów

Uśpiona aplikacja

MediaPlayer.PauseMediaElement.Pause

SoundEffectInstance.PauseVibrateController.StopPhotoCamera.Dispose

Zapis strony i stanu (globalnie)

XNA Audio Paused

Sensors Notifications suppressed

Networking Cancelled

Sockets Disconnected

MediaElement Disconnected

Camera Disposed

Activation Resource Management

MediaElement.Source/Position/Play

Socket.ConnectAsyncnew PhotoCamera/VideoCamera

Przywrócenie stanu aplikacji, jeżeli została tombstonowana

Uruchomiona aplikacja

PhoneApplicationPage.OnNavigatedTo

PhoneApplicationService.Activated

Framework:Przypięcie zasobów

Framework:Wznowienie wątków i

timerów

Uśpiona App

XNA Audio ResumedSensors Notifications resumedNetworking Completed with

CancellationSockets -MediaElement

-

Camera -

Isolated Storage vs State Storage• Nazwa Isolated storage wywodzi się ze sposobu

przechowywania danych poprzez izolowanie ich od innych aplikacji – Może być używane jako miejsce do przechowywania plików

i folderów– Dostęp nie jest szybki – technologia NVRAM– Może zostać użyte do przechowywania par – nazwa/wartość, np.

ustawienia programu• State storage – ponieważ przechowuje stan aplikacji

– Może zostać użyte do przechowywania par – nazwa/wartość – dla przechowywania stanu aplikacji uśpionych i tombsonowanych

– Bardzo szybki dostęp do danych

Demo

• Bez Storage• Ze Storage• Pełna obsługa

Captain’s Log

31

Podsumowanie

• Tylko jedna aplikacja jest aktywna w tym samym czasie• Przyciski Start i Wstecz są używane do przełączania się

pomiędzy aplikacjami i uruchamiania nowych aplikacji• Jeżeli ponad aplikacją jest uruchamiana inna, to aplikacja

jest uśpiona (stale w pamięci, ale nie działa) lub Tombstonowana (usunięta z pamięci)

• Aplikacje używają metod klasy App.xaml.cs do zapisywania i przywracania stanu– Stan może być przechowywany w pamięci celem szybkiego

powrotu do aplikacji lub w Isolated Storage dla pełnego zapisu danych

31

BACKGROUND TASKSDziałanie w tle

33

Multitasking

• Background Agents–Okresowi (Periodic)– Zasobożerne (Resource Intensive)

• Transfer danych w tle• Alarmy i przypomnienia• Dźwięk w tle

33

Agenci

• Agents– Okresowi– Resource Intensive

• Aplikacja może mieć po jednym każdego typu• Inicjalizacja w aplikacji, działanie w tle– Reboot ich nie ruszy

• Kontrola poprzez ustawienia telefonu– Maksymalnie 18 agentów okresowych

• Agend działa maksymalnie 14 dni– Może być odnawiany

Generic Agent Types

Agenci okresowi• Występowanie– Co 30 min

• Czas działania– ok. 15 sekund

• Ograniczenia– Nie więcej niż

6 MB pamięci– Nie więcej niż

10% CPU

Resource Intensive Agents• Mogą działać, jeżeli…– Zasilanie z sieci– Internet bez GSM

• Występowanie– Co 10 min

• Ograniczenia– Nie więcej niż

6 MB pamięci

Funkcjonalności agentów

Dozwolone Kafelki Toast Lokalizacja Sieć Zapis i odczyt ISO Storage Sockets Większość API frameworków

Zabronione

Wyświetlanie UI Biblioteki XNA Mikrofon i aparat Sensory Odtwarzanie audio

(tylko przez specjalne API)

Demo

Captain’s Location Log

Debugging Background Tasków

• Uciążliwe byłoby czekanie 30 minut na każde wywołanie tasku…

• …ale w trybie debugowania można skrócić ten czas

• Kompilacja warunkowa ułatwi nam zbudowanie takiego projektu

#if DEBUG_AGENT ScheduledActionService.LaunchForTest(taskName,

TimeSpan.FromSeconds(60));#endif

Debugging Agenta

• Przy użyciu przycisku Start lub Wstecz podczas działania aplikacji z agentem Visual Studio nie odłączy debuggera

• Można ustawiać breakpointy wewnątrz agenta, jak w przypadku zwykłego kodu aplikacji

• Debugger zachowuje się identycznie – można wykonywać aplikację linia po linii lub podglądać zawartość zmiennych

• Działa to też przy debuggowaniu na urządzeniu• Identyczne działanie dla

ResourceIntensiveAgents

Demo

Debugging Tasks

File Transfer Tasks

• Możliwe jest tworzenie tasków do przekazywania plików z i do Isolated Storage

• Transfer plików będzie aktywny także po wyłączeniu aplikacji

• Aplikacja może uzyskać dostęp do postępu pobierania/wysyłania pliku

• Obsługa HTTP i HTTPs– FTP nie wspierane

• System kolejkuje pliki

42

Zasady transferu w tle

• Jest kilka zasad wykorzystywania File Transfer Tasks– Maksymalny rozmiar pliku wysyłanego: 5 MB– Maksymalny rozmiar pliku pobieranego przez GSM: 20

MB– Maksymalny rozmiar pliku pobieranego przez Wi-Fi:

100 MB• Parametry te mogą być modyfikowane poprzez

obiekt TransferPreferences tworzony dla każdego transferu

42

Demo

Picture Fetch

Scheduled Notifications

• Czasowe powiadomienia na telefonie• Wspierają alarmy i przypomnienia• Reboot telefonu nie usuwa ich• Zgodne z UX telefonu

Alarms vs Reminders?

Alarmy

45

Przypomnienia

•Modalne•Odłóż i odrzuć•Własne dźwięki•Brak aplikacji wywołującej•Nie odkładają się na stosie

• Więcej informacji• Integracja z innymi

przypomnieniami• Odłóż i odrzuć• Uruchamiają aplikację• Globalne ustawienia telefonu

Tworzenie przypomnienia

• Kod tworzy przypomnienie i dodaje je do schedulera telefonu• Wartość eggTime przechowuje czas do wywołania przypomnienia• Ten kod ustawia także stronę aplikacji, którą wyświetli przypomnienie

using Microsoft.Phone.Scheduler;...eggReminder = new Reminder("Egg Timer");

eggReminder.BeginTime = DateTime.Now + new TimeSpan(0, eggTime, 0);eggReminder.Content = "Egg Ready";eggReminder.RecurrenceType = RecurrenceInterval.None;eggReminder.NavigationUri = new Uri("/EggReadyPage.xaml",

UriKind.Relative);

ScheduledActionService.Add(eggReminder);

Gospodarowanie przypomnieniami

• Przypomnienia są rozpoznawane po nazwie• Ten kod znajduje przypomnienie o nazwie „Egg

Timer” i usuwa je ze schedulera

Reminder eggReminder = ScheduledActionService.Find("Egg Timer") as Reminder;

if ( eggReminder != null ) { ScheduledActionService.Remove("Egg Timer");}

Demo

Egg Timer

Audio Playback Agents

• Możliwe jest utworzenie Audio Playback Agenta zarządzającego playlistą

• Identyczny mechanizm jak przy Background Taskach

• Audio może być strumieniowane lub przechowywanie w Isolated Storage

Background Audio

• Odtwarzanie– Aplikacja dostarcza URL albo strumień do Zune– Audio jest odtwarzane nawet, gdy aplikacja jest zamknięta– Aplikacja jest informowana o zbliżaniu się końca pliku lub bufora

• Integracja z telefonem– Music & Video Hub– Universal Volume Control (UVC), aplikacja uruchomieniowa,

kontrolki, contextual info– Uruchomienie kontekstowe – Start menu, UVC, Music & Video Hub

• Integracja z aplikacją– Aplikacja może pozyskać status odtwarzania, postęp i metadane– Rejestracja notyfikacji odtwarzania

Podsumowanie

• Aplikacja może tworzyć procesy działające w tle– Periodic Task i ResourceIntensive działają nawet, gdy

aplikacja jest zamknięta– Przypomnienia uruchomią się niezależnie od statusu

działania aplikacji– Audio działa niezależnie od aplikacji

• Aplikacje i ich procesy mogą się komunikować poprzez Isolated Storage

• Visual Studio pozwala debuggować taski w taki sam sposób, jak normalne aplikacje

LIVE TILESKafelki

User Experience

• Windows Phone 7 posiada unikatowy system zapewniający użytkownikowi dostęp do najważniejszych informacji poprzez Live Tiles

+• Push Notifications oferują deweloperowi

możliwość przesyłania informacji wprost do aplikacji użytkownika (nawet, gdy aplikacja nie jest aktywna) – w tym aktualizacje kafelków

Tiles 101

• Skróty do aplikacji• Statyczne lub

dynamiczne• 2 rozmiary: małe i

duże– Duże tylko dla

aplikacji typu 1st party• Kontrolowane przez

użytkownika

Data Driven Template Model

• Ustalony zestaw property• Każde property odpowiada elementowi na kafelku• Każdy element UI ma określone miejsce• Nie każdy element musi być używany• Animacje nie są rozszerzalne

Background Image(173 x

173 .png)

Title Count

Scenariusze i popularne aplikacje

Send to WP7 Kafelek z linkiem Toast z linkiem

AlphaJax Obrotowy kafelek Ruchomy toast

Seattle Traffic Map Kafelek z natężeniem

ruchu

Pogoda Kafelek pogodowy Toast ostrzegający

Chess by Post Obrotowy kafelek Ruchomy toast

Beezz Kafelek „Nieczytane” Bezpośredni toast

Są już tysiące aplikacji wspierających Live Tiles!

Podstawowe i wewnętrzne kafelki

• Kafelek aplikacji– Przypinany z listy aplikacji– Właściwości kafelka z Application

Manifest

• Wewnętrzne kafelki– Nowość w WP7 Mango (7.5)– Tworzone jako wynik działania

użytkownika (w aplikacji)

Front

Back

Live Tiles – Local Tile API• Update lokalnych kafelków (nie push)

– Pełna kontrola nad wszystkimi properties, niezależnie czy aplikacja działa normalnie, czy w tle

– Calorie counter, sticky notes• Wielokafelek (SIC!)

– Deep-link do specyficznych sekcji aplikacji– Uruchamia odpowiednią akcję

bezpośrednio

Application TileLaunches main app experience

Secondary TileLaunches world news page

Secondary TileLaunches local news page

Live Tiles – Local Tile API ciąg dalszy

• Update „tyłu” kafelków– Pełna kontrola nad wszystkimi properties, niezależnie czy

aplikacja działa normalnie, czy w tle– Zawartość, tytuł, tło

– Kafelek odwraca się po losowym czasie– Obrót kafelka jest asynchroniczny

Title

Zawartość

Tytuł

TłoString zawartości jest dłuższy

Demo

Live Tiles – Local Tile API

Tile Schedule• Okresowo zmienia obraz kafelka bez przekazywania informacji• Używa obrazków tylko z sieci web, nigdy z lokalnych źródeł• Ustawia kanał powiadomień i podpina go do notyfikacji kafelka• Kilka ograniczeń

– Obrazek musi być mniejszy niż 80 KB– Czas ściągania nie może przekroczyć 60 sekund– Kolejne update’y najczęściej co 60 minut– Jeżeli kilkukrotnie update zakończy się niepowodzeniem, system

anuluje dany update• Update może być wykonany jednorazowo, co godzinę,

codziennie, co tydzień lub co miesiąc

Scheduling Tile Update

public partial class MainPage : PhoneApplicationPage {    private ShellTileSchedule _mySchedule;    public MainPage()   {        InitializeComponent();        ScheduleTile();    }

     private void ScheduleTile()    {        _mySchedule = new ShellTileSchedule();        _mySchedule.Recurrence = UpdateRecurrence.Onetime;        _mySchedule.StartTime = DateTime.Now;        _mySchedule.RemoteImageUri = new

Uri("http://cdn3.afterdawn.fi/news/small/windows-phone-7-series.png");        _mySchedule.Start();    }}

Update kafelków przez Background Agenta

• W Windows Phone 7.0 jedyną opcją na update Live Tiles było użycie Tile Schedule lub Push Notification Services– Tile Schedule musi pobierać obrazki z Internetu– PNS wymagają implementacji zewnętrznych usług

• Aby kontrolować kafelki kiedy aplikacja nie jest uruchomiona (bez używania PNS i TS) można użyć Background Agentów– Należy użyć ShellTile API

JAK ZAROBIĆSposoby zarabiania na aplikacjach WP7

Ścieżki zarabiania

Zarobki

System partnerski

Pisanie aplikacji

Samodzielne umieszczanie

Zatrudnienie jako

deweloper

System partnerski

• http://pubcenter.microsoft.com/• Łatwa w użyciu kontrolka – przeciągnij i upuść• Zarabianie w wersjach testowych i bezpłatnych

aplikacjach

Zatrudnienie jako deweloper

• Liczne oferty pracy na rynku zagranicznym• Rosnąca ilość pracodawców na rynku polskim• Windows Phone 7 jest coraz chętniej

wybierany jako telefon dla pracowników korporacji

MATERIAŁY I SPOŁECZNOŚCIOpis materiałów i miejsc, skąd można czerpać wiedzę

Fora i społeczności

• http://forums.create.msdn.com/• http://www.xda-developers.com/• http://wp-7.pl/• http://codeguru.pl/• http://msdn.microsoft.com/

Bibliografia i dokumentacja

• Programming Windows Phone 7Charles PetzoldMicrosoft Presshttp://charlespetzold.com/phone/index.html

• Pełna dokumentacja technicznahttp://msdn.microsoft.com/en-us/library/ff402535(v=VS.92).aspx

PODSUMOWANIE

Q&APytania i odpowiedzi

Paweł Żochowski

pawel.zochowski@studentpartner.plhttp://zozofromelk.wordpress.com/

Dziękuję!