“Smart Multitasking” und “Grabsteine” in Windows Phone 7

Eines der von Windows Mobile her bekannten Konzepte, freies Multitasking bzw. die Ausführbarkeit von Prozessen im Hintergrund, wird in Windows Phone 7 erst einmal nicht zur Verfügung stehen. Über das Für und Wider ist ausführlich diskutiert worden – Fakt ist, dass “normales” Multitasking auf mobilen Geräten der Performance und Akkulaufzeit nicht sonderlich zuträglich ist. Um die Benutzbarkeit von Geräten mit Windows Phone 7 unter allen Umständen zu garantieren, setzen wir hier auf ein anderes Konzept, das die Marketing-Leute “smart multitasking” nennen ;-) Was steckt dahinter?

Anwendungen von Drittanbietern (also alles, was nicht als Bestandteil des OS von Microsoft oder dem OEM ausgeliefert, sondern über den Marketplace installiert wird) können unter WP7 nur im Vordergrund ausgeführt werden – oder eben gar nicht. Navigiert man also von einer Vordergrund-App weg (Drücken des “Zurück”-Buttons über die erste Seite der App hinaus, Drücken des “Start”-Buttons, Aufrufen der Kamera, Kontakte oder anderer sog. Launcher oder Chooser), dann wird die Anwendung beendet. Punkt.

(Das gilt nicht für die eingebauten Funktionen wie den Browser, den Zune Player oder das Telefon – diese funktionieren im Hintergrund.)

Damit der Benutzer trotzdem vernünftig mit einer Anwendung arbeiten kann, sollte der Entwickler deshalb dafür sorgen, dass die relevanten Einstellungen und Zustandsinfos der App passend weggespeichert werden. Sie können dann beim nächsten Start der App wieder hervorgeholt und die App in den Zustand versetzt werden, in dem sie vor dem Beenden war – idealerweise merkt der Nutzer so gar nicht, dass die App beendet wurde.

Das ist besonders dann wichtig, wenn eine App bspw. auf die Kamera des Gerätes, die gespeicherten Fotos, Kontakte o.ä. zugreifen will – auch dann wird nämlich (über die Launcher und Chooser) zu einer anderen App gewechselt. Die vom Benutzer ausgewählten Daten werden dann der wieder frisch gestarteten Anwendung zur Verfügung gestellt. Einstellungen und Zustand können im Isolated Storage abgespeichert werden, die Serialisierung von Objekten übernehmen dabei spezielle APIs. Das “Settings Sample” demonstriert, wie es geht.

Im Lebenszyklus einer App gibt es dafür 4 Events, die unten zusammen mit den zugehörigen Aktionen dargestellt sind: Launching, Closing, Deactivated und Activated. Das Ausführungsmodell von WP7 ist hier ausführlicher dokumentiert.

tombstone

Beachtenswert ist in diesem Zusammenhang das neue Konzept des “tombstoning”, das auftritt, wenn der Start-Button gedrückt oder ein Launcher/Chooser angesprochen wird. An diesem Punkt wird die App im Hintergrund quasi eingefroren (das Deactivated-Event wird ausgelöst) und nach Rückkehr “wiederbelebt” (Activated-Event), ist also im Prinzip nur “scheintot”. Das Besondere an dieser Situation (gegenüber dem normalen Beenden der App, wo persistente Daten gespeichert werden sollten) ist, dass hier auch gewisse flüchtige Daten (Beispiel: auf welcher Seite einer Silverlight-App befindet sich der Nutzer gerade) gespeichert werden sollten. Das kann über die spezielle PhoneApplicationService-Klasse geschehen – welche in einem Deactivated/Activated-Zyklus den Zustand der App speichert, aber nicht in einem Closing/Launching-Zyklus. (Eine App hat übrigens 10 Sekunden Zeit für das Speichern, dann wird sie gnadenlos terminiert – also keine Megabytes an Daten wegspeichern…)

Mein Kollege Yochay Kiriaty hat auf dem Windows Phone Developer Blog einen ausführlichen dreiteiligen Eintrag zu dieser Thematik verfasst, der absolut empfehlenswert ist – Teil 1, Teil 2, Teil 3. Pflichtlektüre für Entwickler, die den Lebenszyklus ihrer App auf WP7 richtig in den Griff bekommen wollen.

- Frank