Windows Store App Lifecycle Overview

ottobre 24, 2012 11 commenti

Ciao! In questo articolo vorrei parlarvi dell’Application Lifecycle, ovvero il ciclo di vita di un’applicazione Windows Store. Una cosa essenziale per la certificazione della nostra app, infatti, è il salvataggio dello stato della nostra app quando, ad esempio, viene terminata e poi ripristinata. Partirò quindi con una panoramica generale sugli stati in cui un’app può trovarsi. Partiamo con un’immagine:

Questa imagine rappresenta in modo completo gli stati in cui un’applicazione Windows Store può trovarsi. Inizialmente, quando accendiamo il PC, tutte le app si trovano ovviamente in uno stato di Not Running. Una volta che apriamo un’applicazione, si verifica l’App Launch; è in questa fase che si apre lo SplashScreen che, ricordo,  deve durare al massimo cinque secondi. Se dura di più, l’applicazione non passa la certificazione dello Store. Se vi servisse più tempo, potete usare un piccolo stratagemma: fate partire lo SplashScreen e portate subito l’utente su uno SplashScreen tale e quale, magari con un LoadingRing.

Dopo l’App Launch (o Resume) si passa allo stato Activation. In questo stato si possono ottenere due importanti informazioni: activation kind che ci specifica cosa ha scatenato l’attivazione della nostra app (per esempio, il launch dell’app stessa, il search, lo sharetarget, device, ecc.) e il PreviousExecutionState (che ci dice semplicemente in che stato si trovava l’app prima di essere attivata).

Un altro stato è quello di Running, durante la quale si avrà un consumo di memoria, CPU, e quindi, nel caso ci trovassimo su un dispositivo mobile, di batteria.
Ed è qui che i programmatori di Windows 8 si sono concentrati di più: il risparmio energetico. Una delle cose fondamentali, infatti, è la gestione ottimizzata delle app. Windows 8 è stato sviluppato in modo che solo e soltanto una applicazione giri in foreground (due nel caso di SnappedView). Tutte le app in background vengono sospese dal sistema operativo dopo circa 10 secondi. Un’app che si trova in uno stato sospeso non consumerà CPU e quindi batteria.

Se dopo 10 secondi che abbiamo messo la nostra app in background non ritorniamo su di essa, entrerà in uno stato Suspending. Prima che si sospenda del tutto, l’evento OnSuspending ci informa che l’app sta per ‘morire’ temporaneamente. Quindi sta a noi programmatori gestire il salvataggio dello stato per un successivo resume / restart, rilasciare risorse allocate (handle), ecc.

L’ultimo stato è quello Closed in cui l’utente chiude l’app o viene killata. Si passa da Suspending e da TerminatedByOS. Lo stato diventerà ClosedByYser per un active successivo.

Questa era un’infarinatura teorica 🙂 presto pubblicherò un esempio pratico!

Happy Coding !

Annunci
Categorie:Windows 8

Congratulazioni Codrina! Nuova MSP

ottobre 11, 2012 1 commento

Ciao a tutti!

E’ con piacere che vi annuncio che la mia compagna di corso Codrina Turcu è diventata ufficialmente una nuova MSP (Microsoft Student Partner) per l’Università degli Studi di Milano – Sede di Crema! Ci affiancheremo e supporteremo a vicenda durante tutto l’anno, per presentare ai nostri colleghi i meravigliosi prodotti e linguaggi di Microsoft! Non mi resta che augurarle (e auguarmi :p) buon lavoro!!!

PS: Se voleste contattarci, potete farlo tramite twitter (@SergiusXP e @_Codrina_)

Categorie:Microsoft, MSP, News

MonoGame: XNA per Windows 8 è possibile!

ottobre 11, 2012 4 commenti

Ciao a tutti dev! Ritorno dopo un periodo di assenza per scrivere un articolo (spero) utile… Avete mai sognato di sviluppare un gioco per Windows 8 con XNA? Si? Bene, anche io. Peccato che XNA per Win8 non sia supportato 🙂 Ragion per cui bisogna vagliare altre soluzioni; sto parlando in particolare di MonoGame per .NET, che vi consente di avere una versione alternativa di XNA.

In rete si trova molta confusione al riguardo, sopratutto sul sito ufficiale del progetto. Vi riporto qui una guida (molto semplice) alla creazione del primo progetto con MonoGame.

Ecco i requisiti:

Dopo aver fatto ciò, bisognerà incollare il template MonoGame nella cartella templates di VS:

“%UserProfile%\My Documents\Visual Studio 2012\Templates\ProjectTemplates\Visual C#\”

image

Una volta che avete completato questa semplice procedura, potrete aprire VS e vi ritroverete il progetto sample di MonoGame:

image

Una volta che avrete il vostro progetto, dovrete aggiungere le referenze a MonoGame.Framework.Windows8.dll (reperibile nella cartella che avete scaricato in precedenza MonoGame Binary):

image

Una volta completato anche questo ultimo passaggio, provate a compilare; funziona! Ecco il vostro primo (mini) gioco! Esattamente come per XNA vi ritroverete il famoso sfondo azzurrino; ora sta a voi e alla vostra fantasia creare dal nulla il vostro capolavoro ludico!

Happy coding 🙂

Forzare il termine di un’app Metro

agosto 30, 2012 4 commenti

Oggi vi segnalo un trucchetto molto utile: quando avete la necessità di terminare un’app metro (ad esempio per testare il corretto funzionamento del life-cycle), può esservi in aiuto una piccola applicazione, Bye Bye Metro Apps, che non fa altro che aggiungere memoria RAM in blocchi di 256 MB alla volta. Quando la memoria sta per esaurire, Windows passerà in uno stato di lavoro di bassa memoria, durante il quale terminerà tutte le app inattive. Anche se le termina, però, esse continueranno comunque a rimanere nell’elenco delle app attive sulla sinistra. A questo punto potrete chiudere Bye Bye Metro Apps e aprire la vostra App sospesa.

Il programma potete trovarlo a questo indirizzo.

Happy coding 🙂

Categorie:Windows 8

Giornata storica per Microsoft…

… Ebbene si! Ieri, Giovedi 23 agosto 2012, abbiamo assistito ad una giornata storica per Microsoft: in 25 anni c’è stato il primo ufficiale cambio di logo!

Devo dire che all’inizio non mi convinceva molto, ma ora sta cominciando a piacermi 😀

Quindi… Addio vecchio logo!

 BENVENUTO NUOVO LOGO! 

Categorie:Microsoft, News

Salvate una lista di oggetti nell’IsolatedStorage

agosto 6, 2012 8 commenti

Ciao!

Ecco una comoda classe che ci permette di salvare una lista di oggetti in un file all’interno dell’IsolatedStorage di Windows Phone:

public class IsoStoreHelper
    {
        private static IsolatedStorageFile _isoStore;
        public static IsolatedStorageFile IsoStore
        {
            get { return _isoStore ?? (_isoStore = IsolatedStorageFile.GetUserStoreForApplication()); }
        }

        public static void SaveList<T>(string folderName, string dataName, ObservableCollection<T> dataList) where T : class
        {
            if (!IsoStore.DirectoryExists(folderName))
            {
                IsoStore.CreateDirectory(folderName);
            }

            string fileStreamName = string.Format("{0}\\{1}.dat", folderName, dataName);

            using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileStreamName, FileMode.Create, IsoStore))
            {
                DataContractSerializer dcs = new DataContractSerializer(typeof(ObservableCollection<T>));
                dcs.WriteObject(stream, dataList);
            }
        }

        public static ObservableCollection<T> LoadList<T>(string folderName, string dataName) where T : class
        {
            ObservableCollection<T> retval = new ObservableCollection<T>();

            string fileStreamName = string.Format("{0}\\{1}.dat", folderName, dataName);

            using (IsolatedStorageFileStream stream = new IsolatedStorageFileStream(fileStreamName, FileMode.OpenOrCreate, IsoStore))
            {
                if (stream.Length > 0)
                {
                    DataContractSerializer dcs = new DataContractSerializer(typeof(ObservableCollection<T>));
                    retval = dcs.ReadObject(stream) as ObservableCollection<T>;
                }
            }

            return retval;
        }

Bisogna ricordarsi di aggiungere una reference a System.Runtime.Serialization.

Per utilizzare questa classe, ecco un esempio:

      ObservableCollection<Prova> lista = new ObservableCollection<Prova>();
      ObservableCollection<Prova> listaTest = new ObservableCollection<Prova>();

      lista.Add(new Prova(){ nome = "Sergio" });
      lista.Add(new Prova(){ nome = "Fabio" });
      lista.Add(new Prova(){ nome = "Erika" });

      IsoStoreHelper.SaveList<Prova>("prova", "prova", lista);
      listaTest = IsoStoreHelper.LoadList<Prova>("prova", "prova");

Happy Coding!

Categorie:C#, Windows Phone

Nuovo MSP

Dopo aver riflettuto attentamente per qusi un anno, ho deciso, finalmente, di presentare la mia candidatura al programma di Microsoft per gli studenti universitari, MSP (Microsoft Student Partner).

Sotto la guida di una docente (Pierangela Samarati, che ringrazio infinitamente), ho inoltrato il mio CV e la mia domanda a Sara Campagna, la responsabile del progetto… Dopo essere stato ricontattato, mi è stata fatta una sorta di intervista telefonica, durante la quale ho avuto modo di capire più in profondo di cosa si occupano gli MSP, ecc…
Praticamente, sono un po’ il tramite tra Microsoft e il mondo dell’Università… Dovrò occuparmi, tra le altre cose, di trasmettere “l’amore” che provo per i suoi programmi e linguaggi, e collaborare con gli altri MSP tecnici per aiutare ragazzi e studenti come me a sviluppare le loro prime App (per Windows Phone e Windows 8).

Sono felicissimo e onorato di annunciare che sono ufficialmente un nuovo MSP per l’Università degli Studi di Milano! La mail è arrivata stamattina… Devo dire che per me è una bella sfida e un’ottima occasione per dimostrare la mia passione per la tecnologia e sopratutto per i prodotti Microsoft.

Spero di potervi raccontare di più man mano che il mio lavoro comincerà 🙂

Ciao ciao

Sergio