Google I / O 2017 Aftermath creazione di componenti Lifecycle-Aware

Come al solito, Google I / O di quest'anno ha visto molti annunci relativi a Android.

In questa serie di suggerimenti rapidi, daremo un'occhiata più da vicino ad alcuni degli aggiornamenti software e alle nuove versioni sulle quali è possibile mettere le mani su oggi

In questo primo post, esamineremo una raccolta di librerie che mira a eliminare il dolore nella gestione del ciclo di vita, offrendo un modo per costruire componenti consapevoli del ciclo di vita in grado di tracciare e reagire automaticamente agli eventi del ciclo di vita. Fornirò anche una breve introduzione a due altri componenti che sono stati progettati per l'utilizzo con questi nuovi componenti che supportano il ciclo di vita: LiveData e Room.

LifecycleOwner e LifecycleObserver

Rispettando il ciclo di vita del tuo Attivitàs e Frammentos è cruciale per creare un'app di successo. Ottieni questi elementi fondamentali in modo errato e finirai con perdite di memoria che causano il rallentamento della tua app e potenzialmente persino l'arresto anomalo.

Un altro problema ricorrente che potresti incontrare con la gestione del ciclo di vita è il tentativo di aggiornare l'interfaccia utente della tua app quando l'attività o il frammento non è in uno stato valido. Ad esempio, se un Attività riceve una richiamata dopo che è stata interrotta, quindi è probabile che la tua app si arresti in modo anomalo. 

Per aiutarti a evitare tutti i grattacapi legati alla gestione del ciclo di vita, Google ha annunciato un nuovo set di componenti che supportano il ciclo di vita in grado di tracciare il ciclo di vita di un'attività o di un frammento e di adeguare il loro comportamento di conseguenza..

È possibile accedere a questi componenti di architettura Android tramite il repository Maven di Google oggi. Tuttavia, sono ancora in alfa, quindi dovresti aspettarti qualche modifica prima della versione 1.0. 

In particolare, il Frammento e AppCompatActivity le classi al momento non possono implementare il nuovo LifecycleOwner interfaccia. Avrai bisogno di usare il temporaneo LifecycleActivity e LifecycleFragment classi fino a quando i componenti di architettura Android raggiungono la versione 1.0. Queste classi saranno deprecate non appena i frammenti e le attività di Android saranno stati aggiornati per supportare i componenti del ciclo di vita.

Per iniziare a sperimentare con questi componenti, devi aggiungere il repository Google Maven a livello di progetto build.gradle file:

allprojects repositories jcenter () // Aggiungi il repository Google Maven // maven url 'https://maven.google.com'

Quindi, apri il tuo livello di modulo build.gradle file e aggiungere quanto segue:

dependencies compile fileTree (dir: 'libs', include: ['* .jar']) compila "android.arch.lifecycle: runtime: 1.0.0-alpha1" compile "android.arch.lifecycle: extensions: 1.0.0 -alpha1 "annotationProcessor" android.arch.lifecycle: compilatore: 1.0.0-alpha1 "

Ci sono alcuni componenti di architettura Android, ma in questo articolo ci concentreremo solo sui due seguenti:

  • LifecycleOwnerQuesto è qualcosa che ha un ciclo di vita, come ad esempio Attività o Frammento.
  • LifecycleObserverQuesta è una classe in grado di monitorare lo stato del ciclo di vita di un componente tramite metodi annotati. Questi metodi vengono chiamati ogni volta che il componente associato entra nello stato del ciclo di vita corrispondente.

Spostando il codice che controlla e reagisce agli eventi del ciclo di vita in un separato LifecycleObserver, puoi prevenire i tuoi metodi correlati al ciclo di vita della tua attività o del frammento (come ad esempio onStart e onStop) dal mongolfiera fuori controllo, rendendo il tuo codice molto più leggibile.

Nell'esempio seguente, stiamo implementando LifecycleObserver, e quindi usando il @OnLifeCycleEvent reagire ai vari eventi del ciclo di vita:

import android.arch.lifecycle.Lifecycle; import android.arch.lifecycle.LifecycleObserver; import android.arch.lifecycle.OnLifecycleEvent; public class SecondActivity implementa LifecycleObserver ... lifecycle.addObserver (this);  @OnLifecycleEvent (Lifecycle.Event.ON_START) void start () // Quando l'attività entra in uno stato ON_START, fai qualcosa // @OnLifecycleEvent (Lifecycle.Event.ON_STOP) void stop () // Quando entra l'attività uno stato ON_STOP, fare qualcosa // // Quando l'attività viene distrutta, annullare la registrazione di LifecycleObserver // @OnLifecycleEvent (Lifecycle.Event.ON_DESTORY) void cleanup () lifecycle.removeObserver (this); 

Quindi, nel Attività vuoi monitorare, estendere LifecycleActivity per accedere al LifecycleObserver informazione:

la classe pubblica MainActivity estende LifecycleActivity 

Molte operazioni possono essere eseguite solo quando un frammento o un'attività si trova in uno stato specifico. Puoi usare lifecycle.getState per controllare rapidamente e facilmente lo stato corrente del componente e quindi eseguire l'azione solo se il componente è nello stato corretto:

if (lifecycle.getState (). isAtLeast (STARTED)) 

LiveData

LiveData è un titolare di dati osservabili che espone un flusso di eventi che è possibile osservare.

La differenza chiave tra LiveData e altri osservabili, come RxJava, è quello LiveData è a conoscenza del ciclo di vita di Android. LiveData rispetta lo stato del ciclo di vita delle attività, dei frammenti e dei servizi e gestirà gli abbonamenti per conto dell'utente.

Fondamentalmente, se il ciclo di vita di un osservatore è inattivo, l'osservatore non verrà informato delle modifiche al LiveData, prevenire l'arresto anomalo dell'applicazione che può verificarsi quando si tenta di inviare aggiornamenti ai componenti interrotti.

Usare LiveData, devi solo dirlo al tuo Attività che si desidera osservare alcuni dati all'interno del ciclo di vita:

public class MyActivity estende LifecycleActivity public void onCreate (Bundle savedState) LiveData dati utente; // Ottieni dati utente da qualche parte // userData.observe (this, user -> ); 

Non appena l'attività inizia, inizierà l'osservazione del LiveData, e il tuo osservatore riceverà un aggiornamento ogni volta che ne valuti il ​​valore LiveData i cambiamenti. Se la Attività viene distrutto, quindi l'abbonamento verrà rimosso automaticamente.

Se uno Attività viene interrotto a causa di una modifica della configurazione, quindi della nuova istanza Attività riceverà l'ultimo valore disponibile dal LiveData.

LiveData condivide alcune somiglianze con RxJava, ma la parola ufficiale di Google I / O è che se hai familiarità con RxJava, allora dovresti iniziare i tuoi progetti Android con LiveData, in quanto è progettato per essere semplice, veloce e leggero e si integra bene con il framework Android. È quindi possibile aggiungere funzionalità RxJava se è necessaria una funzionalità di programmazione reattiva aggiuntiva.

Se vuoi usarlo LiveData con la libreria RxJava 2, quindi apri il tuo livello di modulo build.gradle file e aggiungere il seguente:

compila "android.arch.lifecycle: reactivestreams: 1.0.0-alpha1" 

Sarai quindi in grado di utilizzare i seguenti metodi: 

  • toPublisherAdatta il LiveData flusso su un ReactiveStreams Editore

statico pubblico  Editore toPublisher (ciclo di vita finale di LifecycleOwner, LiveData finale liveData)  
  • fromPublisherCrea un osservabile LiveData flusso da un editore di ReactiveStreams. 

statico pubblico  LiveData fromPublisher (editore finale editore)

La biblioteca della stanza

Sebbene il framework Android abbia un supporto integrato per lavorare con il contenuto SQL raw, queste API sono abbastanza di basso livello e richiedono molto tempo per implementare.

La nuova biblioteca di Google Room promette di astrarre alcuni dei dettagli di implementazione sottostanti su come lavorare con le tabelle SQL e le query raw. Dovrebbe inoltre aiutare a ridurre la quantità di codice boilerplate che è necessario scrivere per convertire query SQL in oggetti dati Java e presenta un Migrazione classe che puoi utilizzare per aggiornare la tua app senza perdere i dati dell'utente. 

Per usare Room, apri il tuo livello di modulo build.gradle file e aggiungere il seguente al dipendenze sezione:

compile "android.arch.persistence.room:runtime:1.0.0-alpha1" annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1" 

Quando si eseguono le query, in genere si desidera che l'interfaccia utente venga aggiornata automaticamente ogni volta che i dati cambiano; con Room, è possibile ottenere ciò utilizzando un tipo di valore restituito di LiveData.

Infine, se stai usando RxJava, le tue query Room possono anche restituire RxJava 2 Editore e fluido oggetti. Per utilizzare RxJava con Room, devi aprire il tuo livello di modulo build.gradle file e aggiungere il seguente al dipendenze sezione:

compila 'android.arch.persistence.room:rxjava2:1.0.0-alpha1' 

Conclusione

In questo rapido suggerimento, ti ho mostrato come gestire il ciclo di vita di Android, utilizzando LifecycleOwner e LifecycleObserver, e ti ho presentato due ulteriori componenti che potresti voler utilizzare insieme al progetto Lifecycle. 

Nel prossimo suggerimento, esamineremo i piani di Google per unire i componenti dell'interfaccia utente di Android Wear con la libreria di supporto di Android e alcune aggiunte alle complicazioni di Android Wear. 

Nel frattempo, dai un'occhiata ad alcuni dei nostri altri tutorial e ai nostri corsi video sullo sviluppo di app per Android!