QMatteoQ's blog

Alcuni cambiamenti nei servizi in background nella beta 2 dei tool di sviluppo

Print Content | More

Nella beta 2 dei tool di sviluppo, rilasciata qualche giorno fa, sono state introdotte una serie di modifiche inerenti ai background agents e ai background transfers. Non si tratta di cambiamenti importanti: relativamente ai background agent l’architettura rimane la stessa che vi ho descritto nei post che ho dedicato all’argomento qualche tempo fa. Se però cercate di eseguire la demo che era allegata al post questa non funzionerà più. Vediamo perchè.

L’evento OnCancel è stato eliminato

Se vi ricordate, il progetto del Background Agent conteneva un metodo opzionale chiamato OnCancel, in cui era possibile specificare eventuali operazioni da eseguire nel momento in cui lo slot di tempo assegnato all’agent stava per scadere. Questo metodo è stato eliminato: ora però le classi dedicate ai background agents (PeriodicTask e ResourceIntensiveTask) espongono delle nuove proprietà che ci permettono di recuperare informazioni sull’ultima esecuzione.

Un nuovo metodo per testare i background agent

Se ricordate, per testare un background agent era necessario aggiungerlo ai task in background schedulati nel sistema (utilizzando la classe ScheduledActionService), dopodichè uscire dall’applicazione e rimanere in attesa che l’agent venisse eseguito. Il processo però non era esente da problemi e spesso e volentieri succedeva che il background agent non venisse eseguito, oppure partisse mentre l’applicazione era ancora in esecuzione (e quindi non era possibile vederne gli effetti).

Per ovviare a questo inconveniente, nella beta2 è stato aggiunto un nuovo metodo da utilizzare solamente in debug, che si occupa di lanciare il background agent dopo un periodo di tempo da noi stabilito. Le operazioni base non cambiano: nell’applicazione in foreground dovremo creare un nuovo task, configurarlo e aggiungerlo ai task schedulati usando il metodo Add esposto dalla classe ScheduledActionService. La novità è che ora dobbiamo eseguire una operazione in più: eseguire il metodo LaunchAndTest (sempre esposto da ScheduledActionService) specificando il nome dell’agent e dopo quanto tempo dal momento in cui il task viene aggiunto vogliamo che questi venga eseguito (sotto forma di TimeSpan). Vediamo un esempio:

PeriodicTask action = ScheduledActionService.Find("TestAgent") as PeriodicTask;
if (action != null)
    ScheduledActionService.Remove("TestAgent");

PeriodicTask task = new PeriodicTask("TestAgent")
{
    Description = "Test task",
    ExpirationTime = DateTime.Now.AddDays(7)
};

ScheduledActionService.Add(task);
ScheduledActionService.LaunchForTest("TestAgent", new TimeSpan(0, 0, 10));

In questo esempio, il task in questione verrà lanciato dopo 10 secondi che è stato aggiunto ai servizi in background: questo ci darà tutto il tempo di uscire dall’applicazione e attendere l’esecuzione.

Un nuovo percorso per i background transfers

Nella serie di tutorial sul multitasking in Mango che sto scrivendo non abbiamo ancora affrontato i background transfers: tranquilli, arriveranno a breve Smile Se avete già iniziato a fare qualche esperimento, saprete che si tratta di una nuova classe che permette di gestire download e upload all’interno della nostra applicazione che possono rimanere in esecuzione anche quando la chiudiamo.

Dato che il trasferimento potrebbe terminare anche quando l’applicazione è chiusa, le API dedicate ai background transfers salvano i file direttamente nell’Isolated Storage, in una cartella ben precisa che, se non esiste, viene creata. Tale cartella, nella beta 1, si chiamava transfers ed era posizionata nella root dello storage. Nella beta 2 questa cartella si chiama sempre transfers, ma è stata spostata sotto la cartella shared, la quale è dedicata a contenere una serie di dati che possono essere condivisi tra l’applicazione e i servizi in background (come le immagini da utilizzare per aggiornare la tile).

Il nuovo percorso quindi è shared/transfers, partendo dalla root dell’Isolated Storage. Ci torneremo comunque quando parleremo più in dettaglio di background transfers.

In conclusione

Se dovessero emergere altri cambiamenti importanti, pubblicherò sicuramente altri post con i dettagli! Nel frattempo, trovate qui sotto il link per scaricare la versione aggiornata alla beta2 del progetto demo sui Background Agents. Buon download!


Windows Phone , Mango , Microsoft

3 comments

Related Post