Google I / O 2017 Aftermath Construirea componentelor bazate pe ciclul de viață

Ca de obicei, Google I / O din acest an a văzut multe anunțuri legate de Android.

În această serie de sfaturi rapide, vom examina mai îndeaproape unele dintre actualizările de software și noile versiuni pe care le puteți pune pe mâini astăzi

În acest prim post, vom examina o colecție de biblioteci care urmărește să elimine durerea din gestionarea ciclului de viață, oferindu-vă o modalitate de a construi componente bazate pe ciclul de viață, care să poată urmări și să reacționeze automat la evenimentele ciclului de viață. Voi oferi, de asemenea, o scurtă prezentare a celorlalte două componente care au fost concepute pentru a fi utilizate cu aceste componente noi bazate pe ciclul de viață: LiveData and Room.

LifecycleOwner și LifecycleObserver

Respectarea ciclului de viață al dvs. Activitateși Fragmenteste crucial la crearea unei aplicații de succes. Obțineți aceste greșeli fundamentale și veți termina cu scurgeri de memorie care cauzează o întârziere a aplicației dvs. și poate chiar căderi.

O altă problemă recurentă pe care o puteți întâlni cu gestionarea ciclului de viață încearcă să actualizeze interfața de utilizare a aplicației atunci când activitatea sau fragmentul nu sunt într-o stare validă. De exemplu, dacă o Activitate primește un apel după ce a fost oprit, atunci este foarte probabil ca aplicația dvs. să se prăbușească. 

Pentru a vă ajuta să evitați toate durerile de cap care vin cu gestionarea ciclului de viață, Google a anunțat un nou set de componente care respectă ciclul de viață care pot urmări ciclul de viață al unei activități sau fragment și își pot adapta comportamentul.

Puteți accesa aceste componente de arhitectură Android prin intermediul magazinului Maven Google astăzi. Cu toate acestea, acestea sunt încă în alfa, așadar trebuie să vă așteptați la unele modificări înainte de lansarea 1.0. 

În special, Fragment și AppCompatActivity clase nu pot implementa noul LifecycleOwner interfață. Va trebui să utilizați temporar LifecycleActivity și LifecycleFragment până când componentele de arhitectură Android ajung la lansarea 1.0. Aceste clase vor fi depreciate de îndată ce fragmentele și activitățile Android vor fi actualizate pentru a susține componentele ciclului de viață.

Pentru a începe să experimentați aceste componente, va trebui să adăugați depozitul Google Maven la nivel de proiect build.gradle fişier:

allprojects repositories jcenter () // Adăugați depozitul Google Maven // maven url 'https://maven.google.com'

Apoi, deschideți nivelul modulului build.gradle fișier și adăugați următoarele:

dependență compile fileTree (dir: 'libs', include: ['* .jar']) compilați "android.arch.lifecycle: runtime: 1.0.0-alpha1" compilați "android.arch.lifecycle: extensions: 1.0.0 -alpha1 "adnotareProcesor" android.arch.lifecycle: compilator: 1.0.0-alpha1 "

Există câteva componente de arhitectură Android, însă în acest articol ne vom concentra pe următoarele două:

  • LifecycleOwnerAcesta este un lucru care are un ciclu de viață, cum ar fi un an Activitate sau Fragment.
  • LifecycleObserverAceasta este o clasă care poate monitoriza starea unui ciclu de viață al componentei prin metode adnotate. Aceste metode sunt numite ori de câte ori componenta asociată intră în starea ciclului de viață corespunzător.

Prin mutarea codului care monitorizează și reacționează la evenimentele ciclului de viață într-un sistem separat LifecycleObserver, puteți preveni metodele legate de activitatea sau fragmentul de viață al unui fragment (cum ar fi onStart și onStop) de la balonare afară din control, făcând codul mult mai ușor de citit de om.

În următorul exemplu, implementăm LifecycleObserver, și apoi folosind @OnLifeCycleEvent să reacționeze la diferite evenimente de ciclu de viață:

import șiroid.arch.lifecycle.Lifecycle; import android.arch.lifecycle.LifecycleObserver; import android.arch.lifecycle.OnLifecycleEvent; clasa publica SecondActivity implementează LifecycleObserver ... lifecycle.addObserver (this);  @OnLifecycleEvent (Lifecycle.Event.ON_START) void start () // Când Activitatea intră într-o stare ON_START, faceți ceva // @OnLifecycleEvent (Lifecycle.Event.ON_STOP) void stop () // Când Activitatea intră o stare ON_STOP, faceți ceva // // Când activitatea este distrusă, anulați înregistrarea LifecycleObserver // @OnLifecycleEvent (Lifecycle.Event.ON_DESTORY) void cleanup () lifecycle.removeObserver (this); 

Apoi, în Activitate pe care doriți să le monitorizați, să le extindeți LifecycleActivity pentru a avea acces la LifecycleObserver informație:

clasa publica MainActivity extinde LifecycleActivity 

Multe operațiuni pot fi efectuate numai atunci când un fragment sau o activitate se află într-o stare specifică. Poți să folosești lifecycle.getState pentru a verifica rapid și ușor starea curentă a componentei și apoi efectuați acțiunea numai dacă componenta este în starea corectă:

dacă (lifecycle.getState ()) este cel mai recent (STARTED)) 

LiveData

LiveData este un suport de date observabil care expune un flux de evenimente pe care le puteți observa.

Diferența cheie între LiveData și alte observabile, cum ar fi RxJava, este asta LiveData este conștient de ciclul de viață Android. LiveData respectă starea de viață a activităților, fragmente și servicii și vă va gestiona abonamentele.

În mod crucial, dacă ciclul de viață al unui observator este inactiv, atunci observatorul nu va fi notificat despre modificările aduse LiveData, prevenind accidentele de aplicații care pot apărea atunci când încercați să împingeți actualizările la componentele oprite.

A folosi LiveData, trebuie doar să-ți spui Activitate că doriți să observați anumite date în cadrul ciclului de viață:

public class MyActivity extinde LifecycleActivity public void onCreate (Bundle savedState) LiveData datele utilizatorului; // Obțineți date de utilizator de undeva // userData.observe (acest utilizator, -> ); 

De îndată ce începe activitatea, va începe observarea LiveData, iar observatorul dvs. va primi o actualizare ori de câte ori valoarea acesteia LiveData schimbări. În cazul în care Activitate este distrus, abonamentul va fi eliminat automat.

Daca un Activitate este oprit din cauza unei modificări a configurației, apoi a noii instanțe a acesteia Activitate va primi ultima valoare disponibilă din LiveData.

LiveData împărtășește unele asemănări cu RxJava, dar cuvântul oficial de la Google I / O este că dacă sunteți familiarizat cu RxJava, atunci ar trebui să începeți proiectele Android cu LiveData, deoarece este proiectat să fie simplu, rapid și ușor și se integrează bine cu cadrul Android. Apoi puteți adăuga caracteristici RxJava dacă aveți nevoie de funcționalitate suplimentară de programare reactivă.

Dacă doriți să utilizați LiveData cu biblioteca RxJava 2, apoi deschideți nivelul modulului build.gradle fișier și adăugați următoarele:

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

Veți putea apoi să utilizați următoarele metode: 

  • toPublisherAdaptă LiveData flux la un ReactiveStreams Editor

statică publică  Editor toPublisher (ultimul ciclu de viață LifecycleOwner, final LiveData liveData)  
  • fromPublisherCreează o observabilitate LiveData de la un editor ReactiveStreams. 

statică publică  LiveData fromPublisher (editor final editor)

Biblioteca de cameră

Deși cadrul Android are built-in suport pentru lucrul cu conținut SQL brut, aceste API-uri sunt destul de joase și consumatoare de timp pentru a implementa.

Noua bibliotecă de cameră Google promite să abroge unele dintre detaliile de implementare care stau la baza de lucru cu tabele SQL SQL și interogări. De asemenea, ar trebui să contribuiți la reducerea cantității de cod de boilerplate pe care trebuie să o scrieți pentru a converti interogările SQL în obiecte de date Java și oferă o migrațiune clasă pe care o puteți utiliza pentru a vă actualiza aplicația fără a pierde datele utilizatorului. 

Pentru a utiliza Camera, deschideți modulul build.gradle fișier și adăugați următoarele la dependențe secțiune:

compilați "android.arch.persistence.room:runtime:1.0.0-alpha1" adnotareProcesor "android.arch.persistence.room:compiler:1.0.0-alpha1" 

Când efectuați interogări, veți dori în mod obișnuit ca interfața dvs. utilizator să se actualizeze automat ori de câte ori se schimbă datele; cu Room, puteți obține acest lucru utilizând un tip de valoare de retur LiveData.

În cele din urmă, dacă utilizați RxJava, atunci întrebările camerei pot reveni și pe RxJava 2 Editor și curgător obiecte. Pentru a folosi RxJava cu Room, va trebui să deschideți nivelul modulului build.gradle fișier și adăugați următoarele la dependențe secțiune:

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

Concluzie

În acest sfat rapid, v-am arătat cum să gestionați ciclul de viață Android, utilizând LifecycleOwner și LifecycleObserver, și v-ați prezentat două componente suplimentare pe care ați dori să le utilizați împreună cu proiectul Lifecycle. 

În următorul sfat, vom analiza planurile Google de a îmbina componentele UI Android Wear cu Biblioteca de suport Android, precum și unele adăugiri la complicațiile Android Wear. 

Între timp, verificați unele dintre celelalte tutoriale și cursurile noastre video de dezvoltare a aplicațiilor Android!

Cod