Windows 8 für Entwickler

Preview:

Citation preview

Microsoft Student Partners© 2012 Microsoft Corporation. Alle Rechte vorbehalten.

Eine typische Windows 7 Anwendung… Lässt sich mit Tastatur und Maus bedienen

Läuft nur auf x86 und x64 CPUs

Kann Administratorrechte anfordern und dann beliebig auf die Festplatte schreiben

Kann im Hintergrund laufen und dort beliebig die CPU auslasten

Kann uneingeschränkt auf Sensoren (Kamera, Mikrofon, GPS) zugreifen

Kann beliebig Internet-Traffic erzeugen, auch über mobile Datenverbindungen

Ein Anwendungsmodell aus anderen Zeiten.

Neue Formfaktoren wie Tablets sprechen auch Anwender an, die sich bisher vielleicht keinen Computer gekauft hätten.

Eine typische Windows 8 Anwendung… Lässt sich mit Tastatur und Maus bedienen, aber auch mit Touch und Stift

Läuft auf x86, x64 und ARM CPUs

Hat begrenzten Festplattenzugriff

Kann im Hintergrund nur begrenzt die CPU auslasten

Kann nur nach Zustimmung des Benutzers auf Sensoren (Kamera, Mikrofon, GPS) zugreifen

Kann nur mit Zustimmung des Benutzers Internet-Traffic erzeugen

Diese neuen Anforderungen ließen sich mit dem bestehenden Anwendungsmodell nicht umsetzen. Deshalb…

Windows 8 Apps laufen in einer neuen Runtime: WinRT. Für Desktop-Anwendungen ändert sich nichts.

DEMO

Bisher: viele Anwendungen machen zeitaufwändige Operationen (z.B. Web-Service-Abfragen) im UI-Thread, der dadurch blockiert wird.

UI

Thread 1

UI

Thread 2

Web-Service

abfrage

UI reagiert nicht

Bisher: viele Anwendungen machen zeitaufwändige Operationen (z.B. Web-Service-Abfragen) im UI-Thread, der dadurch blockiert wird.

UI

Thread 1

UI

Thread 2

Web-Service

abfrage

UI reagiert weiter

UI

Zu jeder Schnittstelle in WinRT existieren Metadaten. Diese Metadaten werden dazu genutzt, um automatisch Projektionen für die unterstützten Programmiersprachen zu generieren.

WinRT

(C++, C#, VisualBasic)

Metadaten

C++ C# / Visual Basic JavaScript

Projektion Projektion Projektion

WinRT sieht in jeder Programmiersprache so aus, wie man es dort erwarten würde

var filePicker = new Windows.Storage.Pickers.FileOpenPicker();filePicker.fileTypeFilter.push(".jpg");

filePicker.pickSingleFileAsync().done(function (file) {if (file) {

WinJS.Utilities.query("img").setAttribute("src", URL.createObjectURL(file));

}});

var filePicker = new FileOpenPicker();filePicker.FileTypeFilter.Add(".jpg");

var file = await filePicker.PickSingleFileAsync();

if (file != null) {var stream = await file.OpenReadAsync();

var bitmap = new BitmapImage();bitmap.SetSource(stream);

MyImage.Source = bitmap;}

auto filePicker = ref new FileOpenPicker();filePicker->FileTypeFilter->Append(".jpg");

task<StorageFile^>(filePicker->PickSingleFileAsync()).then([this](StorageFile^ file)

{if (file) {

task<IRandomAccessStreamWithContentType^>(file->OpenReadAsync()).then([this](IRandomAccessStreamWithContentType^ stream)

{auto bitmap = ref new BitmapImage();bitmap->SetSource(stream);MyImage->Source = bitmap;

});}

});

C++ C#

JavaScript

Zwei UI-Technologien

XAML

Für C#, VisualBasic und C++

HTML5, CSS3

Für JavaScript

Der Lebenszyklus einer Windows 8 App unterscheidet sich deutlich von einer Windows 7 Anwendung

Apps lassen sich unter Windows 8 nur über den neuen Windows Store installieren (Ausnahme: Desktop-Anwendungen)

Windows 8 Apps benutzen ein einheitliches Paketformat. Dieses ist digital signiert um Manipulation während des Downloads zu verhindern.

Files / Assets

AppXManifest.xml

BlockMap

Signatur

Zip Central Directory

.appx package

Windows 8 Apps laufen in einer Sandbox und haben eingeschränkten Zugriff auf Betriebssystem-Ressourcen.

App 1 App 2

Betriebssystem

Contracts

Dire

kte

r

AP

I Zu

griff

Bro

ker

Windows APIs (WinRT)

Lokaler kontext Lokaler kontext

Will eine App auf eine Ressource zugreifen, benötigt sie dafür die Berechtigung (Capability).

Jede Anwendung muss deklarieren, welche Capabilities sie benötigt.

Die Capabilities, die von einer App genutzt werden, werden im Windows Store aufgelistet.

Bei Capabilities, die die Privatsphäre des Benutzers betreffen, fragt Windows explizit, wenn eine Anwendung diese zum ersten Mal benutzen möchte (z.B. Geolocation, WebCam, Mikrofon).

Apps können nicht frei auf das Dateisystem zugreifen. Der Benutzer kann ihnen aber über FilePicker und FolderPicker Lese-und/oder Schreibrechte an bestimmten Dateien und Ordnern geben.

Jede App hat einen lokalen und isolierten Speicherbereich, auf den sie uneingeschränkt zugreifen kann.

Apps können außerdem Zugriff auf den Eigene-Dateien-Ordner des Benutzers beantragen.

Apps können ihre Einstellungen über den Microsoft Account des Benutzers mit anderen Rechnern synchronisieren.

AppLocal Storage

Microsoft

Account

Unter Windows 8 läuft im Normalfall nur eine, mit Snapping zwei Apps zur selben Zeit. Apps im Hintergrund werden automatisch pausiert und wieder aufgeweckt, wenn sie in den Vordergrund geholt werden.

Laufende AppAngehaltene

App

anhaltenBeendete

AppWenig ressourcen

App läuft App angehalten App läuft nicht

fortsetzen

App hat 5s Zeit, bevor sie

angehalten wird

App wird nicht

benachrichtigt, bevor sie

beendet wird

Apps warden benachrichtigt,

wenn die fortgesetzt werden

Benutzer

startet App

Splash screen

Aber es gibt vielfältige Möglichkeiten für Apps, doch im Hintergrund zu laufen. Etwa um Audio wiederzugeben, Daten herunterzuladen, GPS Spuren aufzuzeichnen usw.

Frage

Wer von euch hat schon einmal mit C# gearbeitet?

Windows 8 Apps können nur einen Teil des .NET Frameworks nutzen.

.NET und WinRT-Datentypen lassen sich problemlos kombinieren, wie hier der WinRT Datentyp IRandomAccessStream und der .NET Datentyp Stream.

var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("dummy.dat", CreationCollisionOption.ReplaceExisting);

using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.ReadWrite)) { using (Stream outStream = stream.AsStreamForWrite()) {

outStream.Write(buffer, 0, buffer.Length); outStream.Flush();

} }

C#

Die WinRT Projektion für C# und VisualBasic unterstüzt die neuen Sprachkonzepte für asynchrone Programmierung.

async void Methode(){

var ergebnis1 = await AsynchroneOperation1();var ergebnis2 = await AsynchroneOperation2();var ergebnis3 = await AsynchroneOperation3();

}

C#

Recommended