Som vanlig så dette årets Google I / O mange Android-relaterte kunngjøringer.
I denne serien med raske tips, vil vi se nærmere på noen av programvareoppdateringene og nye utgivelser du kan få hendene på i dag.
I dette første innlegget skal vi se på en samling biblioteker som har som mål å ta smerten ut av livssyklushåndtering, ved å gi deg en måte å bygge livscyklusbevisste komponenter som kan spore og reagere på livssyklusarrangementer automatisk. Jeg skal også gi en kort introduksjon til to andre komponenter som har blitt designet for bruk med disse nye livscyklusbevisste komponentene: LiveData og Room.
Respekterer livets livssyklus Aktivitet
s og Fragment
s er avgjørende å skape en vellykket app. Få disse grunnleggende feilene, og du kommer til å slutte med minnelekkasjer som forårsaker at appen din forsinker, og muligens enda krasj.
Et annet gjentakende problem du kan støte på med livssyklusadministrasjon, forsøker å oppdatere appens brukergrensesnitt når aktiviteten eller fragmentet ikke er i en gyldig tilstand. For eksempel, hvis en Aktivitet
mottar tilbakering etter at den er stoppet, så er det ganske sannsynlig at appen din kommer til å krasje.
For å hjelpe deg med å unngå alle hodepine som følger med livssyklusbehandling, har Google annonsert et nytt sett med livssyklusbevisste komponenter som kan spore livscyklusen til en aktivitet eller et fragment og justere deres oppførsel tilsvarende.
Du kan få tilgang til disse Android Architecture-komponentene via Googles Maven-depot i dag. Imidlertid er de fortsatt i alfa, så du bør forvente at noen bryter endringer før 1.0-utgivelsen.
Spesielt, den Fragment
og AppCompatActivity
klasser kan for tiden ikke implementere den nye LifecycleOwner
grensesnitt. Du må bruke den midlertidige LifecycleActivity
og LifecycleFragment
klasser inntil Android Arkitektur Komponenter når deres 1.0 utgave. Disse klassene vil bli avviklet så snart Android's fragmenter og aktiviteter har blitt oppdatert for å støtte livscykluskomponentene.
For å begynne å eksperimentere med disse komponentene, må du legge til Google Maven-depotet på prosjektnivå build.gradle fil:
allprojects repositories jcenter () // Legg til Google Maven repository // maven url 'https://maven.google.com'
Deretter åpner du modulnivået build.gradle fil, og legg til følgende:
avhengigheter compile fileTree (dir: 'libs', inkluderer: ['* .jar']) kompilere "android.arch.lifecycle: runtime: 1.0.0-alpha1" compile "android.arch.lifecycle: utvidelser: 1.0.0 -alpha1 "annotationProcessor" android.arch.lifecycle: compiler: 1.0.0-alpha1 "
Det er noen Android Arkitektur-komponenter, men i denne artikkelen skal vi bare fokusere på følgende to:
LifecycleOwner
: Dette er noe som har en livssyklus, for eksempel en Aktivitet
eller Fragment
.LifecycleObserver
: Dette er en klasse som kan overvåke komponentens livscyklusstatus via annoterte metoder. Disse metodene kalles når den tilknyttede komponenten går inn i den tilsvarende livscyklusstaten.Ved å flytte koden som overvåker og reagerer på livssyklushendelser i en egen LifecycleObserver
, Du kan forhindre aktiviteten eller fragmentets livssyklusrelaterte metoder (for eksempel onStart
og onStop
) fra ballong ut av kontroll, noe som gjør at koden din er mye mer menneskelig lesbar.
I det følgende eksemplet implementerer vi LifecycleObserver
, og deretter bruke @OnLifeCycleEvent
å reagere på ulike livssyklushendelser:
importer android.arch.lifecycle.Lifecycle; importer android.arch.lifecycle.LifecycleObserver; importer android.arch.lifecycle.OnLifecycleEvent; offentlig klasse SecondActivity implementerer LifecycleObserver ... lifecycle.addObserver (dette); @OnLifecycleEvent (Lifecycle.Event.ON_START) void start () // Når aktiviteten går inn i en ON_START-tilstand, gjør noe // @OnLifecycleEvent (Lifecycle.Event.ON_STOP) void stop () // Når aktiviteten går inn en ON_STOP-tilstand, gjør noe // // Når aktiviteten er ødelagt, registrer du LifecycleObserver // @OnLifecycleEvent (Lifecycle.Event.ON_DESTORY) ugyldig opprydding () lifecycle.removeObserver (dette);
Så, i Aktivitet
du vil overvåke, utvide LifecycleActivity
for å få tilgang til LifecycleObserver
informasjon:
offentlig klasse MainActivity utvider LifecycleActivity
Mange operasjoner kan bare utføres når et fragment eller en aktivitet er i en bestemt tilstand. Du kan bruke lifecycle.getState
for å raskt og enkelt sjekke komponentens nåværende tilstand, og utfør deretter handlingen hvis komponenten er i riktig tilstand:
hvis (lifecycle.getState (). isAtLeast (STARTED))
LiveData
LiveData
er en observerbar dataholder som avslører en strøm av hendelser som du kan observere.
Nøkkelen forskjellen mellom LiveData
og andre observerbare ting, som RxJava, er det LiveData
er klar over Android livssyklusen. LiveData
respekterer livscyklusstatusen til dine aktiviteter, fragmenter og tjenester, og vil administrere abonnementer for deg.
Viktig, hvis observatørens livssyklus er inaktiv, vil observatøren ikke bli varslet om endringer i LiveData
, Forhindre programkrasj som kan oppstå når du prøver å skyve oppdateringer til stoppede komponenter.
Å bruke LiveData
, du trenger bare å fortelle din Aktivitet
at du vil observere noen data i livssyklusen:
offentlig klasse MyActivity utvider LifecycleActivity public void onCreate (Bundle savedState) LiveDatabrukerdata; // Få brukerdata fra et sted // userData.observe (dette, brukeren -> );
Så snart aktiviteten starter, begynner den å observere LiveData
, og observatøren din mottar en oppdatering når verdien av det LiveData
Endringer. Hvis Aktivitet
blir ødelagt, vil abonnementet bli fjernet automatisk.
Hvis en Aktivitet
er stoppet på grunn av en konfigurasjonsendring, og den nye forekomsten av det Aktivitet
vil motta den siste tilgjengelige verdien fra LiveData
.
LiveData
Deler noen likheter med RxJava, men det offisielle ordet fra Google I / O er at hvis du er kjent med RxJava, bør du starte Android-prosjektene dine med LiveData
, som den er designet for å være enkel, rask og lett, og integrerer godt med Android-rammen. Du kan deretter legge til RxJava-funksjoner hvis du trenger ekstra reaktiv programmeringsfunksjonalitet.
Hvis du vil bruke LiveData
med RxJava 2-biblioteket, og åpne deretter modulnivået ditt build.gradle fil og legg til følgende:
kompilere "android.arch.lifecycle: reactivestreams: 1.0.0-alpha1"
Deretter kan du bruke følgende metoder:
toPublisher
: Tilpasser LiveData
Strøm til en ReactiveStreams Forlegger
.
offentlig statiskForlegger toPublisher (Endelig LifecycleOwner-livssyklus, endelig LiveData liveData)
fromPublisher
: Skaper en observerbar LiveData
stream fra en ReactiveStreams utgiver.
offentlig statiskLiveData fraPublisher (endelig utgiver forlegger)
Selv om Android-rammeverket har innebygd støtte for å jobbe med rå SQL-innhold, er disse APIene relativt lave og tidkrevende å implementere.
Googles nye rombibliotek lover å abstrahere noen av de underliggende implementeringsdetaljer for å jobbe med rå SQL-tabeller og spørringer. Det bør også bidra til å redusere mengden av boilerplate-koden du trenger å skrive for å konvertere SQL-spørringer til Java-dataobjekter, og den har en migrasjon
klassen du kan bruke til å oppdatere appen uten å miste brukerens data.
For å bruke rom, åpne modulnivået ditt build.gradle fil og legg til følgende til avhengig
seksjon:
kompilere "android.arch.persistence.room:runtime:1.0.0-alpha1" annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1"
Når du utfører spørringer, vil du vanligvis at brukergrensesnittet ditt skal oppdateres automatisk når dataene endres. med rom, kan du oppnå dette ved å bruke en returverdetype av LiveData
.
Til slutt, hvis du bruker RxJava, kan Room-spørringene dine også returnere RxJava 2-tallet Forlegger
og Flow
objekter. For å bruke RxJava med rom må du åpne modulnivået ditt build.gradle fil og legg til følgende til avhengig
seksjon:
kompilere 'android.arch.persistence.room:rxjava2:1.0.0-alpha1'
I dette raske tipset viste jeg deg hvordan du administrerer Android-livssyklusen, ved hjelp av LifecycleOwner og LifecycleObserver, og introduserte deg til to ekstra komponenter du kanskje vil bruke sammen med livscyklusprosjektet.
I neste tips skal vi se på Googles planer om å slå sammen Android Wear UI-komponenter med Android Support Library, samt noen tillegg til Android Wear-komplikasjoner.
I mellomtiden kan du se noen av våre andre opplæringsprogrammer og våre videokurser på Android app-utvikling!