Montag, 18. Juni 2012

Debug Metro Apps - Terminated State & Background Task

Hallo Jungs & Mädels,
ich habe am Wochenende von Felix Rieseberg einen Tipp bekommen der für mich und andere im Büro Gold wert ist. Es ist eine kleine Sache aber die meisten kennen sie nicht, daher mein Post dazu.

Beim ersten ausführen des Windows App Cert Kits scheiterte meine Anwendung einzig beim Punkt "Performance suspend" mit der Meldung:
Error Found: The performance suspend test collected the following results:
  • Application Error: Application Suspend was not detected for application App. This could be because your application failed to suspend correctly. Please consider re-running the test avoid interacting with the application while tests are running.
So sieht das im Report aus:

Der Fehler kam von Suspension Manager an folgender Stelle in der App.xaml.cs:
if (args.PreviousExecutionState == ApplicationExecutionState.Terminated)
{    // Restore the saved session state only when appropriate
    await SuspensionManager.RestoreAsync();

Aber der Weg das herauszufinden war für mich schwer, denn hier an meinem Entwicklerrechner "terminierte" die App so gut wie nie.
Wie also bewusst den Termination State hervorrufen? Ähnliche Probleme gibt es auch mit BackgroundTask's.

Hier nun der eigentliche Tipp:

Im Visual Studio 2012 unter View -> Toolbars eine Toolbar mit dem Namen "Debug Location" hinzufügen. Verdammt unscheinbarer Name für die genialen Mittel die hier verborgen liegen.

Erst mal ein Screenshot vom Helferlein:

Und da seht Ihr auch schon um was es hier geht, man kann die Anwendung (bei mir ein Beispiel von Microsoft) in den Suspend Status schicken, sie wieder aufwecken (Resume) und das aller Beste, sie gezielt in den Terminated State schicken. Dazu einfach "Suspend and shutdown" anklicken und schon geht's ab. Beim nächstem anwerfen der App steht der PreviousExecutionState auf Terminated *Yeah*.

Und für die unter Euch die sich wie mein Kollege Lars schon intensiv mit den Background Task auseinander gesetzt haben gibt's noch ein weiteres Highlight. Der Eintrag "SampleBackgroundTask" entspricht dem Namen eines von der App registrierten Tasks. Mit einem herzhaften Klick werden Träume wahr - Ihr stoßt den Task an ohne auf den Ablauf einer Zeit oder das auftreten eines anderen Triggers zu warten. Ist das geil? Ich finde schon!

Dafür DANKE Felix, schon damit hat sich der Besuch beim Mobile Camp in Dresden gelohnt.

So einen habe ich noch... Nur ein Tipp am Rande. Vielleicht habt Ihr euch auch den SuspensionManager aus den Templates geschnappt um Euren App-LifeCycle damit zu verarbeiten.

Meine Suche nach den Fehler der die App im Cert Kit scheitern lies führte mich zu folgender XML Exception (Unexpected end of file):


Daneben gab es noch eine weiter System.Runtime.InteropService.COMException:


Also lange Reder kurzer Sinn, wie beim neuen Grid-Template gut zu sehen wird es empfohlen als Navigation-Parameter Strings (Zeichenketten) statt Objekten zu verwenden. Oder man baut entsprechend den SuspensionManager um.

Auf jeden Fall klappt es danach (dem Umstellen auf Strings) auch mit den Windows App Cert Kit und man ist mit seiner Metro Style App einen Schritt weiter in Richtung Windows 8 Store.

Ich freue mich immer über Kommentare, Fragen und Hinweise - naja und wenn's sein muss dürft ihr auch Kritik hier abladen!

Keine Kommentare:

Kommentar posten