Zoals gewoonlijk zag de Google I / O van dit jaar tal van Android-gerelateerde aankondigingen.
In deze serie snelle tips gaan we enkele software-updates en nieuwe releases die u kunt krijgen eens nader bekijken. vandaag.
In deze eerste post gaan we kijken naar een verzameling bibliotheken die de pijn willen wegnemen uit Lifecycle Management, door u een manier te bieden om levenscyclusbewuste componenten te bouwen die automatisch levenscyclusgebeurtenissen kunnen volgen en erop kunnen reageren. Ik zal ook een korte inleiding geven tot twee andere componenten die zijn ontworpen om te gebruiken met deze nieuwe levenscyclusbewuste componenten: LiveData en Room.
Respect voor de levenscyclus van uw Activiteit
s en Fragment
zus beslissend om een succesvolle app te maken. Krijg deze basisprincipes verkeerd, en je krijgt de gevolgen van geheugenlekken waardoor je app achterloopt en mogelijk zelfs crasht.
Een ander terugkerend probleem dat u kunt tegenkomen met Lifecycle Management is het proberen de gebruikersinterface van uw app bij te werken wanneer de activiteit of het fragment zich niet in een geldige staat bevindt. Bijvoorbeeld, als een Activiteit
ontvangt een terugbelverzoek nadat deze is gestopt, dan is het vrij waarschijnlijk dat uw app vastloopt.
Om u te helpen bij het voorkomen van alle problemen die gepaard gaan met lifecycle management, heeft Google een nieuwe set levenscyclusbewuste componenten aangekondigd die de levenscyclus van een activiteit of fragment kunnen volgen en hun gedrag dienovereenkomstig kunnen aanpassen.
Je kunt deze Android-architectuurcomponenten vandaag nog openen via de Maven-repository van Google. Ze zijn echter nog steeds in alfa, dus u moet enkele brekende wijzigingen verwachten vóór de 1.0-release.
In het bijzonder, de Fragment
en AppCompatActivity
klassen kunnen momenteel het nieuwe niet implementeren LifecycleOwner
interface. U moet de tijdelijke gebruiken LifecycleActivity
en LifecycleFragment
klassen totdat de Android-architectuurcomponenten hun 1.0-release bereiken. Deze klassen worden beëindigd zodra de fragmenten en activiteiten van Android zijn bijgewerkt ter ondersteuning van de levenscycluscomponenten.
Om te beginnen met het experimenteren met deze componenten, moet je de Google Maven-repository toevoegen aan je projectniveau build.gradle het dossier:
allprojects repositories jcenter () // Voeg de Google Maven-repository // maven url 'https://maven.google.com' toe
Open vervolgens je moduleniveau build.gradle bestand en voeg het volgende toe:
afhankelijkheden compile fileTree (dir: 'libs', include: ['* .jar']) compileer "android.arch.lifecycle: runtime: 1.0.0-alpha1" compileer "android.arch.lifecycle: extensions: 1.0.0 -alpha1 "annotationProcessor" android.arch.lifecycle: compiler: 1.0.0-alpha1 "
Er zijn een paar Android-architectuurcomponenten, maar in dit artikel gaan we ons alleen concentreren op de volgende twee:
LifecycleOwner
: Dit is iets dat een levenscyclus heeft, zoals een Activiteit
of Fragment
.LifecycleObserver
: Dit is een klasse die de levenscyclusstatus van een component kan controleren via geannoteerde methoden. Deze methoden worden aangeroepen wanneer het bijbehorende onderdeel de bijbehorende levenscyclusstatus bereikt.Door de code die controleert op en reageert op levenscyclusgebeurtenissen naar een afzonderlijke te verplaatsen LifecycleObserver
, je kunt de levenscyclus-gerelateerde methoden van je activiteit of fragment (zoals onStart
en onStop
) van uit de hand lopen van ballonvaren, waardoor uw code veel menselijker leesbaar is.
In het volgende voorbeeld zijn we aan het implementeren LifecycleObserver
, en gebruik vervolgens de @OnLifeCycleEvent
om te reageren op verschillende lifecycle-evenementen:
import android.arch.lifecycle.Lifecycle; importeer android.arch.lifecycle.LifecycleObserver; import android.arch.lifecycle.OnLifecycleEvent; public class SecondActivity implementeert LifecycleObserver ... lifecycle.addObserver (this); @OnLifecycleEvent (Lifecycle.Event.ON_START) void start () // Wanneer de activiteit een ON_START-status invoert, doet u iets // @OnLifecycleEvent (Lifecycle.Event.ON_STOP) void stop () // Wanneer de activiteit binnenkomt een ON_STOP-status, doe iets // // registreer de LifecycleObserver // @OnLifecycleEvent (Lifecycle.Event.ON_DESTORY) ongedaan maken wanneer de activiteit is vernietigd () lifecycle.removeObserver (this);
Vervolgens in de Activiteit
je wilt controleren, uitbreiden LifecycleActivity
om toegang te krijgen tot de LifecycleObserver
informatie:
openbare klasse MainActivity verlengt LifecycleActivity
Veel bewerkingen kunnen alleen worden uitgevoerd als een fragment of activiteit zich in een specifieke staat bevindt. Je kunt gebruiken lifecycle.getState
om snel en eenvoudig de huidige status van het onderdeel te controleren en voer dan alleen de actie uit als het onderdeel in de juiste staat verkeert:
if (lifecycle.getState (). isAtLeast (STARTED))
Actuele gegevens
Actuele gegevens
is een waarneembare gegevenshouder die een reeks gebeurtenissen blootlegt die u kunt observeren.
Het belangrijkste verschil tussen Actuele gegevens
en andere waarneembare dingen, zoals RxJava, is dat Actuele gegevens
is op de hoogte van de Android-levenscyclus. Actuele gegevens
respecteert de levenscyclusstatus van uw activiteiten, fragmenten en services en beheert abonnementen voor u.
Cruciaal is dat als de levenscyclus van een waarnemer niet actief is, de waarnemer niet op de hoogte wordt gebracht van wijzigingen in de Actuele gegevens
, het voorkomen van applicatie-crashes die kunnen optreden wanneer u updates naar gestopte componenten probeert te pushen.
Gebruiken Actuele gegevens
, je hoeft het alleen maar te vertellen Activiteit
dat u enkele gegevens binnen de levenscyclus wilt observeren:
public class MyActivity breidt LifecycleActivity uit public void onCreate (Bundle savedState) LiveDatagebruikersgegevens; // Haal gebruikersgegevens ergens vandaan // userData.observe (this, user -> );
Zodra de activiteit begint, begint het de Actuele gegevens
, en je waarnemer ontvangt een update wanneer de waarde daarvan dat is Actuele gegevens
veranderingen. Als het Activiteit
wordt vernietigd, dan wordt het abonnement automatisch verwijderd.
Als een Activiteit
wordt gestopt als gevolg van een configuratiewijziging, en vervolgens het nieuwe exemplaar Activiteit
ontvangt de laatste beschikbare waarde van de Actuele gegevens
.
Actuele gegevens
deelt enkele overeenkomsten met RxJava, maar het officiële woord van Google I / O is dat als u bekend bent met RxJava, u uw Android-projecten met Actuele gegevens
, omdat het is ontworpen om eenvoudig, snel en lichtgewicht te zijn en goed te integreren is met het Android-framework. U kunt dan RxJava-functies toevoegen als u extra reactieve programmeerfunctionaliteit nodig hebt.
Als je het wilt gebruiken Actuele gegevens
met de RxJava 2-bibliotheek open je je moduleniveau build.gradle bestand en voeg het volgende toe:
compileren "android.arch.lifecycle: reactivestreams: 1.0.0-alpha1"
U kunt dan de volgende methoden gebruiken:
toPublisher
: Past de Actuele gegevens
stream naar ReactiveStreams Uitgeverij
.
openbare statischeUitgeverij toPublisher (laatste LifecycleOwner-levenscyclus, laatste LiveData actuele gegevens)
fromPublisher
: Creëert een waarneembaar Actuele gegevens
streamen van een ReactiveStreams-uitgever.
openbare statischeActuele gegevens fromPublisher (laatste uitgever uitgeverij)
Hoewel het Android-framework ingebouwde ondersteuning biedt voor het werken met onbewerkte SQL-inhoud, zijn deze API's vrij laagdrempelig en tijdrovend om te implementeren.
De nieuwe bibliotheek van Google belooft een aantal van de onderliggende implementatiegegevens van het werken met onbewerkte SQL-tabellen en -query's weg te abstraheren. Het moet ook helpen de hoeveelheid boilerplate-code die u moet schrijven te verminderen om SQL-query's naar Java-gegevensobjecten te converteren, en het bevat een Migratie
klasse die u kunt gebruiken om uw app bij te werken zonder de gegevens van de gebruiker te verliezen.
Als u Room wilt gebruiken, opent u uw moduleniveau build.gradle bestand en voeg het volgende toe aan de afhankelijkheden
sectie:
compileer "android.arch.persistence.room:runtime:1.0.0-alpha1" annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1"
Bij het uitvoeren van query's wilt u meestal dat uw gebruikersinterface automatisch wordt bijgewerkt wanneer de gegevens worden gewijzigd. met Room kunt u dit bereiken door een retourwaardetype van te gebruiken Actuele gegevens
.
Ten slotte, als u RxJava gebruikt, kunnen uw roomqueries ook RxJava 2's retourneren Uitgeverij
en flowable
voorwerpen. Om RxJava met Room te gebruiken, moet je je moduleniveau openen build.gradle bestand en voeg het volgende toe aan de afhankelijkheden
sectie:
compileer 'android.arch.persistence.room:rxjava2:1.0.0-alpha1'
In deze snelle tip heb ik je laten zien hoe je de Android-levenscyclus beheert, met behulp van LifecycleOwner en LifecycleObserver, en heb je kennisgemaakt met twee extra componenten die je naast het Lifecycle-project wilt gebruiken..
In de volgende tip gaan we kijken naar Google's plannen om Android Wear UI-componenten samen te voegen met de Android-ondersteuningsbibliotheek, evenals enkele toevoegingen aan Android Wear-complicaties.
Bekijk in de tussentijd enkele van onze andere zelfstudies en onze videocursussen over de ontwikkeling van Android-apps!