Hello, Android Multiscreen: approfondimenti

In questa guida in due parti l'applicazione Phoneword, creata nella guida Hello, Android, viene espansa per poter gestire una seconda schermata. Nello stesso tempo vengono presentati i blocchi predefiniti di base per le applicazioni Android. È incluso anche un approfondimento dell'architettura Android, per consentire una maggiore comprensione della struttura e delle funzionalità delle applicazioni Android.

In Hello, Android Multiscreen: guida introduttiva è stata compilata ed eseguita la prima applicazione Xamarin.Android multi-schermata.

In questa guida viene illustrata l'architettura Android più avanzata. Verranno anche illustrate le funzioni di spostamento in Android tramite Intent, nonché le opzioni di spostamento hardware. Le nuove aggiunte all'app Phoneword verranno descritte in dettaglio man mano che si verrà sviluppando una visione olistica delle relazioni con il sistema operativo e con le altre applicazioni.

Introduzione all'architettura Android

In Hello, Android: approfondimenti si è appreso che le applicazioni Android sono programmi univoci, perché non hanno un punto di ingresso singolo. Il sistema operativo (o un'altra applicazione), invece, avvia una delle attività registrate dell'applicazione, che a sua volta avvia il processo per l'applicazione. Questo approfondimento dell'architettura Android amplia la comprensione del modo in cui vengono costruite le applicazioni Android, presentando i blocchi predefiniti per le applicazioni Android e le loro funzioni.

Blocchi di compilazione dell'applicazione Android

Un'applicazione Android è costituita da una raccolta di classi Android speciali denominate Blocchi di applicazioni in bundle con un numero qualsiasi di risorse dell'app, immagini, temi, classi helper e così via, coordinate da un file XML denominato Manifesto Android.

I blocchi applicazione costituiscono la colonna portante delle applicazioni Android, perché consentono di eseguire operazioni che in genere non è possibile eseguire con le classi normali. I due blocchi più importanti sono Attività e Servizi:

  • Attività : un'attività corrisponde a una schermata con un'interfaccia utente ed è concettualmente simile a una pagina Web in un'applicazione Web. In un'applicazione newsfeed, ad esempio, la schermata di accesso rappresenta la prima attività, l'elenco scorrevole delle notizie rappresenta un'altra attività e la pagina dei dettagli per ogni elemento rappresenta una terza attività. Altre informazioni sulle attività sono disponibili nella guida Ciclo di vita delle attività.

  • Servizio : i servizi Android supportano le attività eseguendo attività a esecuzione prolungata e eseguendole in background. I servizi non hanno un'interfaccia utente e vengono usati per gestire le attività non collegate agli schermi, ad esempio la riproduzione di un brano in background o il caricamento di foto in un server. Per altre informazioni sui servizi, vedere le guide Creating Services (Creazione di servizi) e Android Services (Servizi Android).

Un'applicazione Android non può usare tutti i tipi di blocchi e spesso contiene diversi blocchi di un unico tipo. Ad esempio, l'applicazione Phoneword in Hello, Android: guida introduttiva è composta da una sola attività (schermata) e da alcuni file di risorse. Un'app lettore musicale semplice può avere diverse attività e un servizio per la riproduzione di musica quando l'app è in background.

Intenti

Un altro concetto fondamentale nelle applicazioni Android è quello di Intent. Android è progettato in base al principio dei privilegi minimi: le applicazioni hanno accesso solo ai blocchi necessari per funzionare e hanno accesso limitato ai blocchi che costituiscono il sistema operativo o altre applicazioni. Analogamente, i blocchi sono ad accoppiamento libero: sono progettati per avere poca conoscenza di e accesso limitato ad altri blocchi (anche i blocchi che fanno parte della stessa applicazione).

Per comunicare, i blocchi applicazione inviano e ricevono messaggi asincroni detti Intent. Gli Intent contengono informazioni sul blocco di destinazione. A volte contengono anche alcuni dati. Un Intent inviato da un componente di un'app attiva un evento in un altro componente dell'app, associando i due componenti e consentendo a questi di comunicare. Inviando e ricevendo Intent, è possibile consentire ai blocchi di coordinare operazioni complesse, ad esempio l'avvio dell'app della fotocamera per eseguire foto e salvarle, la raccolta di informazioni sulla posizione o il passaggio da una schermata alla successiva.

AndroidManifest.XML

Quando si aggiunge un blocco all'applicazione, questo viene registrato con un file XML speciale denominato manifesto Android. Il manifesto tiene traccia di tutti i blocchi di applicazioni in un'applicazione, nonché dei requisiti di versione, delle autorizzazioni e delle librerie collegate: tutto ciò che il sistema operativo deve conoscere per l'esecuzione dell'applicazione. Tramite le attività e gli Intent il manifesto Android determina anche quali azioni siano appropriate per ogni attività. Queste funzionalità avanzate del manifesto Android sono trattate nella guida Working with the Android Manifest (Uso del manifesto Android).

Nella versione a schermata singola dell'applicazione Phoneword sono stati usati una sola attività, un solo Intent e AndroidManifest.xml, oltre a risorse aggiuntive come le icone. Nella versione multi-schermata di Phoneword è stata aggiunta un'attività e l'applicazione è stata avviata dalla prima attività tramite un Intent. La sezione successiva prende in esame il modo in cui gli Intent consentono di eseguire spostamenti all'interno delle applicazioni Android.

Spostamento in Android

Per passare da una schermata all'altra sono stati usati Intent. È ora il momento di approfondire il codice usato a questo scopo per vedere come funzionano gli Intent e comprendere il ruolo di questi ultimi nelle operazioni di spostamento in Android.

Avviare una seconda attività con un Intent

Nell'applicazione Phoneword è stato usato un Intent per avviare una seconda schermata (attività). Iniziare creando un Intent, passando l'oggetto Context corrente (thische fa riferimento all'oggetto Context) e il tipo del blocco applicazione che si sta cercando (TranslationHistoryActivity):

Intent intent = new Intent(this, typeof(TranslationHistoryActivity));

Context è un'interfaccia per le informazioni globali sull'ambiente dell'applicazione, che consente agli oggetti appena creati di sapere cosa sta succedendo con l'applicazione. Usando un'analogia con i messaggi, si specifica il nome del destinatario del messaggio (TranslationHistoryActivity) e l'indirizzo del ricevitore (Context).

Android offre la possibilità di allegare dati semplici a un Intent (i dati complessi vengono gestiti in modo diverso). Nell'esempio relativo a Phoneword, si usa PutStringArrayExtra per allegare un elenco di numeri di telefono all'Intent e si richiama StartActivity per il destinatario dell'Intent. Ecco il codice completo:

translationHistoryButton.Click += (sender, e) =>
{
    var intent = new Intent(this, typeof(TranslationHistoryActivity));
    intent.PutStringArrayListExtra("phone_numbers", _phoneNumbers);
    StartActivity(intent);
};

Altri concetti introdotti in Phoneword

L'applicazione Phoneword ha introdotto alcuni concetti non trattati in questa guida. Essi includono:

Risorse stringa: nell'applicazione Telefono word il testo di TranslationHistoryButton è stato impostato su "@string/translationHistory". La sintassi di @string indica che il valore della stringa viene archiviato nel file di risorse stringa, Strings.xml. A Strings.xml è stato aggiunto il valore della stringa translationHistory seguente:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="translationHistory">Call History</string>
</resources>

Per altre informazioni sulle risorse stringa e su altre risorse Android, vedere la guida Risorse Android.

ListView e ArrayAdapter : un controllo ListView è un componente dell'interfaccia utente che offre un modo semplice per presentare un elenco di righe di scorrimento. Un'istanza di ListView richiede un Adapter da cui ricevere i dati presenti nelle visualizzazioni di righe. La riga di codice seguente è stata usata per popolare l'interfaccia utente di TranslationHistoryActivity:

this.ListAdapter = new ArrayAdapter<string>(this, Android.Resource.Layout.SimpleListItem1, phoneNumbers);

ListView e Adapter non rientrano nell'ambito di questo documento, ma vengono trattati in modo completo nella guida ListViews and Adapters (ListViews e Adapter). Popolamento di un controllo ListView con dati riguarda in modo specifico l'uso delle classi ListActivity e ArrayAdapter predefinite per creare e popolare un elemento ListView senza definire un layout personalizzato, come è stato fatto nell'esempio Phoneword.

Riepilogo

La prima applicazione multi-schermata Android è stata completata. Questa guida ha presentato i blocchi predefiniti per le applicazioni Android e gli Intent e li ha usati per creare un'applicazione Android multi-schermata. Sono state acquisite le competenze di base necessarie per iniziare a sviluppare applicazioni Xamarin.Android personali.

Nelle guide Building Cross-Platform Applications (Creazione di applicazioni multipiattaforma) si apprenderà come creare applicazioni multipiattaforma con Xamarin.