Download - Windows 8 für Entwickler
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#