1 / 41

Twitter hashtag: #cztechdays

Twitter hashtag: #cztechdays. Twitter hashtag: #cztechdays. Architektura Metro aplikací. Michael Juřek Software Architect Microsoft s.r.o. Twitter hashtag: #cztechdays. Agenda. WinRT Asynchronní volání Životní cyklus aplikace Běh na pozadí Závěrečné úvahy. Desktopov é aplikace.

sydney
Download Presentation

Twitter hashtag: #cztechdays

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Twitter hashtag: #cztechdays

  2. Twitter hashtag: #cztechdays

  3. Architektura Metro aplikací Michael JuřekSoftware ArchitectMicrosoft s.r.o. Twitter hashtag: #cztechdays

  4. Agenda • WinRT • Asynchronní volání • Životní cyklus aplikace • Běh na pozadí • Závěrečné úvahy

  5. Desktopové aplikace C#/VB kód Windows API Manuálně generovaný interop kód

  6. Příklad kódu [DllImport("avicap32.dll", EntryPoint="capCreateCaptureWindow")]static extern int capCreateCaptureWindow( string lpszWindowName, int dwStyle, int X, int Y, int nWidth, int nHeight, int hwndParent, int nID); [DllImport("avicap32.dll")] static externbool capGetDriverDescription( int wDriverIndex,[MarshalAs(UnmanagedType.LPTStr)] ref string lpszName, int cbName, [MarshalAs(UnmanagedType.LPTStr)] ref string lpszVer, int cbVer); …

  7. Metro aplikace C#/VB/C++/JavaScript kód Windows 8 API Windows Runtime (WinRT)

  8. Příklad kódu using Windows.Media.Capture;var ui = new CameraCaptureUI();ui.PhotoSettings.CroppedAspectRatio = new Size(4, 3);var file = await ui.CaptureFileAsync(CameraCaptureUIMode.Photo);

  9. Architektura WinRT Metro style app Language Projection Windows Metadata & Namespace UI Pickers Controls Media XAML Storage Network … Windows Runtime Core Windows Core

  10. Použití WinRT je snadné • Koncept WinRT a .NET frameworku je velmi podobný • Jeho použití z C#/VB.NET je zcela přirozené • Většina rozdílů mezi .NET a WinRT zůstává skryta • Konverze běžných typů provádí runtime automaticky: • Např. IIterable<T> <-> IEnumerable<T> • U složitějších typů jsou k dispozici extenzní metody: Windows.Storage.Streams.IInputStream inputStream; inputStream = await file.OpenForReadAsync(); System.IO.Stream stream = inputStream.AsStream();

  11. Pravidla pro použití WinRT • WinRT je jediná možnost, jak může aplikace využívat služby operačního systému, nelze ji z Metro aplikací obejít • Operace s dopadem na bezpečnost/soukromí musí být specifikovány v deklaraci aplikace a uživatel je o tom informován • U nejcitlivějších operací musí uživatel specificky odsouhlasit jejich první použití v dané aplikaci (např. kamera)

  12. Vytváření vlastních komponent • Aby šlo komponenty použít i z JavaScriptu a C++ … • … veřejné členy veřejných tříd musí dodržet tato pravidla: • Vstupní a výstupní parametry musí být WinRT typy • Struktury předávané hodnotou mohou mít pouze veřejné členy • Kromě XAML prvků musí být veřejné třídy sealed • Nelze použít vlastní generické typy • Visual Studio má přímo projekt pro tyto komponenty • Třeba změnit cíl kompilace na WinMD • Splnění výše uvedených pravidel kontrolováno při kompilaci

  13. DEMO C# komponenta volaná z JavaScriptu

  14. Agenda • WinRT • Asynchronní volání • Životní cyklus aplikace • Běh na pozadí • Závěrečné úvahy

  15. Asynchronní volání • Získávají rostoucí popularitu, neboť: • Umožňují snáze využít dostupná jádra procesoru • V klientských aplikacích zabraňují „zamrznutí“ aplikace během obsluhy událostí (v Metro aplikacích povinné) • V serverových aplikacích zvyšují škálovatelnost, brání vyčerpání threadů • Asynchronní volání jsou v .NET frameworku od verze 1.0… • … ale jsou neintuitivní a vedou k těžko čitelnému kódu • Async/await v C# a VB.NET nabízí snadná asynchronní volání

  16. Asynchronní metody • Chovají se asynchronně, ale mají jednoduchou „synchronní syntaxi“ • Mají v hlavičce klíčové slovo async • Vrací void anebo Task<T> • Mohou volat jiné asynchronní metody s použitím await • Zbytek těla metody je interně zkonvertován na callback • Jsou prováděny v synchronizačním kontextu volajícího • Pro výpočetně náročné akce vytvořte vlastní Task • Pro složitější situace využijte objekt Task

  17. Asynchronní metoda publicasyncTask<XElement>GetXmlAsync(stringurl) { varclient = newHttpClient(); varresponse = awaitclient.GetAsync(url); vartext = response.Content.ReadAsString(); returnXElement.Parse(text); } publicTask<XElement>GetXmlAsync(stringurl) { vartcs = newTaskCompletionSource<XElement>(); varclient = newHttpClient(); client.GetAsync(url).ContinueWith(task => { varresponse = task.Result; vartext = response.Content.ReadAsString(); tcs.SetResult(XElement.Parse(text)); }); return tcs.Task; }

  18. DEMO Asynchronní metoda

  19. Agenda • WinRT • Asynchronní volání • Životní cyklus aplikace • Běh na pozadí • Závěrečné úvahy

  20. Životní cyklus aplikace App 1 App 2 App N App 3 … Running Po krátké pauzepozastavena Okamžitě pokračuje v běhu Suspended Pokud dochází paměť, je ukončena bez varování Terminated

  21. Suspend • Systémové zdroje jsou plně soustředěny na aplikaci v popředí • Neaktivní aplikace zůstává v paměti, ale jinak šetří baterii: • Žádné CPU, síťová komunikace, práce s diskem • Pozastavení všech vláken – pokud jsou v kritické sekci operačního systému, vyčká se • V události Suspending máte k dispozici max. 5 s času na uložení stavu • Při přepnutí zpět je okamžitě k dispozici • PAST NA VÝVOJÁŘE: Aplikace s připojeným debuggerem není nikdy suspendována

  22. Terminate • Řada situací, kdy může být aplikace ukončena • Nedostatek paměti • Přepnutí na jiného uživatele • Uživatel uzavřel aplikaci • Neošetřená výjimka v aplikaci • Ukončení běhu operačního systému • Aplikace o této akci není informována: • Veškeré uložení stavu je nutné již při obsluze Suspend

  23. Stav aplikace • Doporučené akce: • Během užívání aplikace: průběžně ukládejte stav • Suspending: uložte stav aplikace • Resuming: zpravidla není třeba žádná akce • OnLaunched/OnActivated: načtěte stav aplikace (ošetřete případné výjimky) • Ukládejte pouze stav aplikace, ne data (např. fotky patří jinam) • Využijte třídu SuspensionManager, kód najdete v SDK

  24. DEMO Uložení stavu aplikace

  25. Spuštění aplikace • Mnoho různých způsobů: • Uživatel klikne na ikonu (Launch) • Je využit kontrakt nabízený aplikací (OnActivated) • Vyhledávání v aplikaci (OnSearchActivated) • Sdílení obsahu do aplikace (OnShareTargetActivated) • Otevření souboru asociovaného typu (OnFileActivated) • …. řada dalších, méně častých způsobů

  26. Průběh spuštění • Splash Screen • Konzistentní přechod mezi aplikacemi • Definována v manifestu aplikace • Pokud aplikace do 15 s neukáže okno, je ukončena! • „Falešná splash screen“ je velmi špatné řešení • V aplikaci je zavolána metoda v závislosti na typu spuštení/aktivace a je jí předán potřebný kontext • Např. hledaný řetězec v případě OnSearchActivated()

  27. DEMO Aktivace prostřednictvím kontraktu

  28. Agenda • WinRT • Asynchronní volání • Životní cyklus aplikace • Běh na pozadí • Závěrečné úvahy

  29. Běh aplikace na pozadí • Cože? Před chvílí jsme slyšeli, že je vždy pozastavena… • Slyšeli jste dobře, aplikace sama neběží, ale může: • Využívat push notifikace k aktualizaci svého stavu, dlaždic, notifikacím uživatele apod. – velmi doporučováno!!! • Spouštět audio na pozadí (nedocenitelné ) • Stahovat soubory na pozadí • Ani v jednom případě neběží váš kód, ale systémový kód • Existuje ale ještě jedna možnost…

  30. Background task • Je vysoká pravděpodobnost, že je vaše aplikace nepotřebuje • Princip: • Kód rozdělen na část viditelnou a kód na pozadí • Uživatel spouští viditelnou část kódu • Systém spouští a kontroluje běh kódu na pozadí podle preferencí uživatele • Vhodné scénáře – VoIP, chat, komunikátor, …, reakce na změny stavu systému i uživatele, … • Nevhodné scénáře – cokoliv výpočetně náročného

  31. Použití background task • Příslušnou třídu je nutné deklarovat v manifestu aplikace • Úlohu je třeba registrovat za běhu aplikace: • Při jakých událostech je spuštěna: • Např. uplynutí času, odhlášení, přijetí SMS, (ne)dostupnost Internetu,… • Za jakých podmínek je spuštěna • Např. uživatel nepřítomen, dostupný Internet, … • Pokud aplikace běží, může pomocí událostí sledovat průběh svých běžících úloh na pozadí

  32. Rovnější mezi rovnými… • Lock Screen Apps • Mohou agresivněji využívat CPU i na pozadí • Určeno pro komunikaci v reálném čase • Omezený počet, podléhají potvrzení uživatele • PC Settings -> Personalize

  33. Přísné limity • Aplikace na pozadí jsou velmi omezeny: • Lock Screen Apps – 2 s CPU za 15 minut • Ostatní – 1 s CPU za 2 hodiny • Měří se spotřebované výpočetní cykly • Čekání na asynchronní operace nevadí • Rovněž je omezeno množství síťové komunikace • Těžko kvantifikovat, měřeno modelovanou spotřebou energie • Závisí na typu připojení, šířce pásma, aktuální zátěži, …

  34. Pro jistotu ještě jednou • Pro imitaci běhu na pozadí používejte: • Push notifikace • Živé dlaždice • Úlohy na pozadí jsou pro speciální situace a nejsou v běžných aplikacích typické

  35. DEMO Background task

  36. Agenda • WinRT • Asynchronní volání • Životní cyklus aplikace • Běh na pozadí • Závěrečné úvahy

  37. Přenos znalostí • Pokud vyvíjíte v C#/VB • Všechny jazykové konstrukce • Pokud vyvíjíte pro WPF, Silverlight, Windows Phone 7 • XAML • Data binding • MVVM (Model-View-ViewModel) • Pokud vyvíjíte pro Windows Phone 7 • Životní cyklus aplikace, marketplace, manifest, navigace, …

  38. MVVM • De facto standardní návrhový vzor pro XAML rozhraní Uživatelské rozhraní (XAML) s data bindingem Pokud možno žádný code-behind Připravuje data z Modelu pro data binding ve View Přenáší akce uživatele z View na Model Udržuje stav uživatelské seance (serializace při Suspend) Nezávislý na View (dobře testovatelný) Data a manipulace s nimi View ViewModel Model

  39. Portable library • Novinka ve VS 2012 – knihovny pro více platforem • .NET framework, Silverlight, Metro, Windows Phone • Nabízí možnost sdílení kódu mezi platformami • Portable library smí: • Být referencována z libovolné cílové platformy • Referencovat pouze jinou portable library • Používat pouze třídy dostupné na všech cílových platformách

  40. Příklad sdílení kódu ViewModel View (XAML) View (XAML) Model Konkrétnífunkce platformy Konkrétnífunkce platformy Abstrakceplatformy Platforma B Platforma A

  41. Závěrem • WinRT jako bezpečná abstrakce části operačního systému • Asynchronní volání pro dobrou odezvu aplikace • Životní cyklus aplikace spravován s ohledem na výdrž baterie a okamžitou reakci při probuzení • Pokud znáte C# nebo VB (nebo C++ a JavaScript), máte dobrý základ pro vytváření Metro aplikací: • Znalost XAML (WPF, Silverlight, WP7) výhodou • Znalost vývoje na Windows Phone 7 super výhodou

More Related