Kuidas panna Google'i tööhaldur teie heaks tööle

Pildi allikas: https://ayusch.com

Mõelge mõnele kasutamisjuhtumile, millega puutume kokku igapäevastes Androidi arendamise ülesannetes:

  1. Andmefailide allalaadimine kaugserverist mobiilimängu jaoks.
  2. Failide allalaadimine serverist.
  3. Mobiilselt kogutud andmete sünkroonimine näiteks taustteenusega: krahhi analüütika, logifailide jne üleslaadimine ...
  4. Seadme failide varundamine võrgusalvestusse.

Mis on neil kasutusjuhtudel ühist?

  • Need kõik on pikkade tööülesannete täitmine.
  • Nende saab taustalõngal käitamiseks edasi lükata, kuni kasutaja suhtleb rakendusega. Need ülesanded ei tohiks rakenduse toimivust mõjutada.
  • Neid saab käivitada ka siis, kui kasutaja rakendusega ei suhtle.

Selliste asünkroonsete ülesannete täitmine on tänapäevastes androidi rakendustes väga levinud. Harva puutume kokku rakendustega, mis ei suhelda ühegi taustteenusega ja töötavad täiesti võrguühenduseta. Seetõttu töötasid Google'i insenerid seda silmas pidades välja palju töögraafiku API-sid, et ajastada Androidi selliseid ülesandeid nagu Teenused, Alarmihaldur, Tööde planeerija, GCM-i võrguhaldur, Firebase Job Dispatcher, enne kui tulla välja nende uusimaga (ja minu arvates parim) lahendus: tööjuht.

Work Manager on minu arvates ülekaalukalt parim API, mille Google on viimastel aastatel Androidi jaoks välja pakkunud. Kuid kõigepealt arutage läbi kõik sõiduplaanimehhanismid peale tööjuhi ja uurime nende plusse ja miinuseid. Lõpuks selgitan, miks Work Manager edestab enamikku olemasolevatest lahendustest. Samuti ütlen teile, millal tööhaldurit mitte kasutada.

Selles artiklis käsitleme neid 4 ajastamismehhanismi järjekorras:

  1. Teenused
  2. Töögraafik
  3. GCM-i võrguhaldur
  4. Firebase töökoha dispetšer

Alustame siis!

Teenused

Esiteks on teenused. Teenused on olnud juba nii kaua, kui ma mäletan. Need on olnud arendajatele mõeldud lahendus pikkade tööülesannete täitmiseks, nagu muusika mängimine, failide allalaadimine, andmete sünkroonimine, teie Androidi rakenduse varade krõbistamine ja palju muud. Ja kuigi me nüüd teame, et nende toimingute jaoks on palju paremaid ja energiatõhusamaid viise, on teenused siiski mõnedel kasutusjuhtudel (nt taustal muusika mängimine koos teatisalves oleva teatisega) väga olulised.

Kuid ülejäänud kasutusjuhtudel oleme jõudnud kaugele ja Android on pakkunud palju paremaid API-sid kui selliste ülesannete jaoks mõeldud teenused. Vaatame siis mõnda teenustega seotud probleemi:

  • Vaikimisi töötavad teenused rakenduse, milles need deklareeritakse, põhikeermes. Niisiis, kõik pikaajalised toimingud, nagu pilditöötlus, võrgustamine või MP-3 taasesitus, aeglustavad rakenduse toimimist ja me hakkame kasutajaliideses käredaid märkama.
  • Sellega rääkimiseks peate kasutama protsessidevahelist suhtlust, mis on aeglasem kui siis, kui see toimuks kliendiga samas protsessis.
  • Silumine on keeruline, kuna peate manustama mõnda muud protsessi.
  • Kui teie teenus jookseb kokku, jookseb see põhiprotsessist sõltumatult. See võib kohati olla ka eeliseks.
  • Pikkade tööülesannete jaoks peate kasutama teenuste sisemisi niite, muutes juurutamise keerukamaks.
  • Kui unustate teenuse lõpetada, kui toiming on lõpetatud, võib see taustal töötada ja aku tühjeneda.

Ehkki teenused võivad olla head selliste ülesannete täitmiseks nagu teavitustega muusika mängimine, pole see kõige sobivam lahendus pikkade jooksvate toimingute jaoks, mis võivad blokeerida peamise niidi, nagu võrgundus, arvutamine, MP3 taasesitus jne.

Töögraafikud

Tööde planeerija API-liides võeti kasutusele API tasemel 21. See on efektiivne võrgutoimingute jaoks ja töötab taustal, kui JobInfo.Builderis () määratletud kriteeriumid on täidetud, näiteks kui seade laadib, töötab, on Interneti-ühendusega jne. Süsteemiressursside säästmiseks proovib see ka neid töid pakkida. Kui töö mingil põhjusel ebaõnnestub, on sellega kaasas ka loogika ja uuesti proovimise loogika.

Kuid see ei sobi edasilükkamatuks tööks, näiteks nupu klõpsuga vara allalaadimiseks, mis peaks toimuma kohe ja mitte viivitusega.

Teine puudus, mis häirib enamikku arendajaid, on see, et seda toetatakse ainult API versioonides 21 ja uuemates. Seega ei töötaks see Androidi seadmetes, mis töötavad vähem kui 21 versiooniga, mis on praegu 15%.

GCM-i võrguhaldur

GCM-i võrguhalduriga on kaasas kõik tööplaneerija headused, mille täiendavaks eeliseks on tagasiulatuv ühilduvus. Sisemiselt kasutab GCM võrguhaldur API-versioonide> 21 puhul Job Schedulerit. Versioonide <21 korral kasutab see Google Play teenuste ajakavamootorit.

Samuti on see võimeline ajastama nii ühekordseid ülesandeid kui ka perioodilisi ülesandeid. Seega eemaldab see tööülesannete ajakava koostajal vajaliku lisaülesande Töö ümbersuunamine arendajalt.

Kuid sellel on mõned halvad küljed:

  • Kuna see kasutab Play teenuste ajastusmootorit, töötab see ainult seadmetes, kuhu on installitud mänguteenused.
  • Kui mänguteenuseid värskendatakse, kustutatakse töökohad. Töö uuesti planeerimise eest peab arendaja hoolitsema.
  • Ei sobi mitte edasi lükatavateks toiminguteks ega ülesanneteks, mis peaksid toimuma konkreetsel ajal.
  • Google katkestas GCM-i 10. aprillil 2018 ja see eemaldatakse täielikult 11. aprilliks 2019, seetõttu on soovitatav GCM-i võrguhaldurit enam mitte kasutada.

Vaatame Firebase'i töökoha dispetšerit, mis lahendab meie probleemid.

Firebase töökoha dispetšer

Firebase Job Dispatcher on Androidi teek tausttööde ajastamiseks. See toetab tagasiulatuvat ühilduvust kuni API versioonini 9.

Nii nagu GCM Network Manager, kasutab see tööde ajastamiseks Google Play teenuste ajakavamootorit. Kui seadmesse pole installitud esitamisteenuseid, kasutab see Alarm Managerit. Android-seadmete puhul, kus töötab API versioon 21 või uuem, kasutab see Job Schedulerit.

Siiamaani on kõik korras. See haldab tagasiühilduvust, töötab seadmetes, millel pole Google Play teenuseid, ning sellel on nii ühekordseid kui ka perioodilisi ülesandeid.

Miks siis töökorraldajaga vaeva näha, kui Firebase töökoha dispetšeril see kõik olemas on?

Noh, kuna nende API-de valesti kasutamisel viib see aku tühjenemiseni. Nii et energia säästmiseks on Android välja lasknud palju energiasäästufunktsioone, näiteks Doze Mode, Doze on-the-go, taustteenuste piirangud, App Standby Buckets jne. Nii et arendajana on meie kohus kasutada ära kõik need, et tagada meie rakenduse aku tõhusus kõigil API tasemetel.

See tähendab palju spagetid if-else koodi. Niisiis, lubage mul tutvustada teile kõigile androidide arenduse API-de kavandamise uusimat täiendust:

Tööjuht

Nagu ma juba mainisin, on tööjuht minu sõnul üks parimaid API-sid, mille Google on viimastel aastatel Androidi jaoks välja lasknud. See teeb linnukese kõikidest ruutidest, mida saate sõiduplaani API-lt oodata, ja sellel on kõrge abstraktsuse tase, nii et te ei pea muretsema selliste üksikasjalike detailide pärast nagu energiatarve, varundamine ja ajakava muutmine.

Tööjuht sobib edasilükatava, tagatud tausttöö jaoks. Märksõnad, millele siin keskenduda, on edasilükatavad ja garanteeritud.

Androidi Work Manager ei käivita teie ülesandeid kohe, vaid erineb nendest, et neid saaks täita mingil ajahetkel, kui teie nimetatud piirangud on täidetud. Samuti võetakse arvesse aku piiranguid. See garanteerib ka, et töö teostatakse ka siis, kui teie seade taaskäivitub.

Siin on suurepärane diagramm, mis kirjeldab, millal on ideaalselt kasutada rakendust Work Manager oma Androidi rakendustes:

Kujutise allikas: Google

Nagu näete, sobib see edasilükatavateks toiminguteks, mis ei pea tulevikus toimuma täpsel ajal, näiteks häire või meeldetuletus.

Work Manager'i kasutamise eelised:

  • Ühilduv kuni API 14-ga
  • Lisage piiranguid, näiteks võrgud, laadimine.
  • Oskab planeerida ühekordseid või perioodilisi ülesandeid.
  • Oskab ülesandeid koos aheldada.
  • Garanteerib täitmise ka siis, kui seade taaskäivitub.
  • Täidab ülesandeid tulevikus optimeeritud ajal, arvestades aku, võrgu saadavust.
  • See on osa Android Jetpacki raamatukogudest ja seda soovitab Google: P

See sobib sellisteks toiminguteks nagu krahhiaruannete saatmine taustateenusele, andmete sünkroonimine veebiteenusega, rakenduse varade krõbistamine jne.

Järeldus

Tööhaldurit saab minu arvates kindlasti kasutada kõigi androidi rakenduses edasilükatavate toimingute tegemiseks.

Kui aga ülesanne tuleb täita kohe (muusika esitamine, faili allalaadimine), on kõige parem seda täita esiplaanil oleva teenusega (nt muusika esitamine ja lugude muutmise teatise kuvamine) või allalaadimishalduriga (faili allalaadimiseks) fail).

Niisiis, saate nüüd edasi minna ja kontrollida oma koodi võimalike asendajate kontrollimiseks Work Manageriga. Hea koht alustamiseks oleks kõik teenused, mida teie rakendus loob;)

Artikkel postitati algselt siia.

Mis järgmiseks

Järgmises tööhalduri postituses integreerime Work Manageri Androidi rakendusse ja anname praktilise ülevaate, kuidas tööhaldurit Androidis seadistada ja kasutada. Niisiis, olge kursis!

* Tähtis *: olen loonud mobiiliarendajatele töökoha SLACK, kus saame jagada oma teadmisi kõige uuemast tehnikast, eriti Androidi Arenduses, RxJavas, Kotlinis, Flutteris ja üldiselt mobiilsest arengust.
Vaba tööruumiga liitumiseks klõpsake sellel lingil. See on täiesti tasuta!

Nagu see, mida sa lugesid? Ärge unustage seda postitust Facebookis, Whatsappis ja LinkedInis jagada.

Võite mind jälgida LinkedInis, Quoras, Twitteris ja Instagramis, kus vastan mobiiliarendusega seotud küsimustele, eriti Androidi ja Flutteri kohta.