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.
Rispettando il ciclo di vita del tuo Attività
s e Frammento
s è 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:
LifecycleOwner
: Questo è qualcosa che ha un ciclo di vita, come ad esempio Attività
o Frammento
.LifecycleObserver
: Questa è 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) LiveDatadati 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:
toPublisher
: Adatta il LiveData
flusso su un ReactiveStreams Editore
.
statico pubblicoEditore toPublisher (ciclo di vita finale di LifecycleOwner, LiveData finale liveData)
fromPublisher
: Crea un osservabile LiveData
flusso da un editore di ReactiveStreams.
statico pubblicoLiveData fromPublisher (editore finale editore)
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'
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!