Šta je servis i kako funkcioniše u razvoju aplikacija?

Servis je komponenta sistema Android koja može da obavlja posao bez sopstvenog korisničkog interfejsa, kao što su puštanje muzike, sinhronizacija podataka ili prenos datoteke koji je u toku. Zajedno sa aktivnostima, prijemnicima emitovanja i dobavljačima sadržaja servisi su jedna od četiri osnovne komponente aplikacije na sistemu Android i, kao i ostale, moraju biti registrovani u datoteci AndroidManifest.xml aplikacije. Servis se podrazumevano izvršava na glavnoj niti aplikacije, pa se težak posao i dalje mora premestiti na nit u pozadini.

Android razlikuje pokrenute servise, koji obavljaju zadatak dok se ne zaustave, i vezane servise, na koje se druge komponente mogu vezati i sa njima komunicirati. Servis u prvom planu obavlja posao kojeg je korisnik svestan i mora da prikazuje trajno obaveštenje. Pošto posao u pozadini utiče na trajanje baterije i performanse, Android je postepeno uvodio ograničenja u pogledu toga kada aplikacije smeju da pokreću servise u pozadini, a za odloživ posao Google obično preporučuje biblioteku WorkManager.

Servis na sistemu Android je komponenta aplikacije koja obavlja posao bez sopstvenog korisničkog interfejsa, kao što su reprodukcija muzike, sinhronizacija ili prenos datoteka. Može se pokrenuti da bi obavio zadatak ili ga mogu vezati druge komponente koje žele da komuniciraju sa njim. Servisi u prvom planu prikazuju trajno obaveštenje kako bi korisnik znao da se posao odvija, a zbog ograničenja sistema Android za posao u pozadini za odložive zadatke često se koristi biblioteka WorkManager.

More about Service

Servis je jedna od četiri osnovne komponente aplikacije za Android, zajedno sa aktivnostima, prijemnicima emitovanja i dobavljačima sadržaja. Dok aktivnost prikazuje ekran sa kojim korisnik radi, servis se koristi za posao koji ne zahteva korisnički interfejs ili koji mora da se nastavi čak i ako korisnik napusti ekran. Tipični primeri su puštanje muzike ili podkasta, navigacija, otpremanje datoteka i sinhronizacija podataka sa serverom.

Tehnički gledano, servis je klasa koja nasleđuje klasu android.app.Service i registruje se elementom service u datoteci AndroidManifest.xml. Sistem upravlja životnim ciklusom servisa preko metoda kao što su onCreate(), onStartCommand(), onBind() i onDestroy(). Važno je znati da se servis ne izvršava automatski na zasebnoj niti. Njegov kod se podrazumevano izvršava na glavnoj niti aplikacije, pa se dugotrajan ili blokirajući posao mora premestiti na nit u pozadini, na primer korutinama u jeziku Kotlin, kako aplikacija ne bi prestala da reaguje.

Servisi se mogu koristiti na različite načine, od kojih svaki odgovara drugačijim potrebama:

  1. Servis u prvom planu: Obavlja posao kojeg je korisnik svestan, kao što su reprodukcija muzike ili aktivno praćenje treninga. Servis u prvom planu mora da prikazuje trajno obaveštenje, a u novijim verzijama sistema Android aplikacija mora da deklariše vrstu servisa i da ima pripadajuće dozvole.

  2. Servis u pozadini: Obavlja posao koji korisnik ne vidi direktno. Od verzije Android 8.0 postoje stroga ograničenja u pogledu toga kada aplikacije smeju da pokreću takve servise dok su i same u pozadini.

  3. Vezani servis: Nudi interfejs klijent-server u kojem se druge komponente, uključujući one u drugim aplikacijama, mogu vezati za servis, slati zahteve i primati odgovore. Vezani servis živi sve dok je za njega vezana bar jedna komponenta.

Jedna od najvećih snaga servisa je to što aplikaciji omogućavaju da nastavi važan posao a da on ne bude vezan za određeni ekran. Istovremeno zahtevaju pažnju, jer posao u pozadini troši bateriju, memoriju i podatke. Android je zato postepeno uvodio pravila koja ograničavaju posao u pozadini, a korisnici mogu da vide i zaustave aplikacije koje pokreću servise u prvom planu.

Za mnoge zadatke Google umesto toga preporučuje biblioteku WorkManager, koja je deo paketa Android Jetpack. WorkManager je namenjen poslu koji se mora pouzdano obaviti, čak i ako se aplikacija zatvori ili se uređaj ponovo pokrene, i koji se može odložiti, kao što su otpremanje datoteka dnevnika ili periodična sinhronizacija. WorkManager uzima u obzir ograničenja sistema i može se podesiti uslovima kao što su mrežna veza ili punjenje.

Ukratko, servis je pravi izbor kada aplikacija treba da obavlja posao u toku za koji korisnik očekuje da se nastavi, ili kada druge komponente treba da komuniciraju sa dugotrajnim procesom. Izborom prave vrste servisa, ili biblioteke WorkManager kada se posao može odložiti, programeri mogu da prave aplikacije koje su i funkcionalne i štedljive prema resursima uređaja.

Frequently asked questions about Service

Šta je servis na sistemu Android?

Servis je komponenta sistema Android koja obavlja posao u pozadini bez sopstvenog korisničkog interfejsa. Koristi se za zadatke koji treba da se nastave i kada korisnik ne gleda aplikaciju, kao što su puštanje muzike, navigacija u toku ili otpremanje datoteka.

Servis mora biti deklarisan u datoteci AndroidManifest.xml. Važno je znati da se servis podrazumevano izvršava na glavnoj niti aplikacije. Teški zadaci se zato i dalje moraju premestiti na nit u pozadini ili u korutinu. U novijim verzijama sistema Android postoje i stroga pravila o tome kada aplikacije smeju da rade u pozadini, radi uštede baterije.

Koje vrste servisa postoje na sistemu Android?

Android razlikuje tri vrste servisa. Servis u prvom planu obavlja zadatak kojeg je korisnik svestan i mora da prikazuje obaveštenje sve dok radi. Koristi se, na primer, za reprodukciju muzike ili praćenje trčanja.

Servis u pozadini obavlja posao koji korisnik ne vidi direktno. Od verzije Android 8.0 postoje stroga ograničenja u pogledu toga kada aplikacije smeju da pokreću takve servise, a za mnoge zadatke umesto toga se preporučuje biblioteka WorkManager. Vezani servis omogućava drugim komponentama, kao što je aktivnost, da se vežu za njega i komuniciraju sa njim, a radi samo dok je nešto vezano za njega.

Koja je razlika između pokrenutog i vezanog servisa?

Pokrenuti servis pokreće se metodom startService ili startForegroundService i radi dok se sam ne zaustavi ili dok ga neko ne zaustavi. Obično obavlja određeni zadatak i ne vraća rezultat direktno komponenti koja ga je pokrenula.

Vezani servis pokreće se kada se druga komponenta veže za njega metodom bindService. Pruža interfejs kako bi komponenta mogla da poziva metode i prima odgovore, na primer aktivnost koja upravlja muzičkim plejerom. Kada nijedna komponenta više nije vezana, servis se zaustavlja. Servis može biti i oba istovremeno ako je i pokrenut i vezan.

Kada treba koristiti biblioteku WorkManager umesto servisa?

WorkManager je rešenje koje Google preporučuje za posao u pozadini koji se mora pouzdano obaviti, čak i ako se aplikacija zatvori ili se uređaj ponovo pokrene. To može biti sinhronizacija podataka, otpremanje datoteka dnevnika ili periodično čišćenje.

WorkManager poštuje pravila sistema o bateriji i aktivnosti u pozadini i može se podesiti da radi samo kada je, na primer, uređaj povezan na mrežu Wi-Fi ili se puni. Servis, naročito servis u prvom planu, relevantniji je kada posao treba da se obavi odmah i vidljiv je korisniku, kao što su reprodukcija muzike ili poziv u toku. Za kratkotrajan posao dok je aplikacija otvorena često su dovoljne korutine.

Zašto servis u prvom planu mora da prikazuje obaveštenje?

Servis u prvom planu može dugo da radi i koristi resurse kao što su procesor, baterija i podaci o lokaciji dok korisnik nema otvorenu aplikaciju. Android zato zahteva da prikazuje trajno obaveštenje, kako bi korisnik znao da aplikacija radi u pozadini.

To pruža transparentnost i omogućava korisniku da zaustavi servis ili otvori aplikaciju. U novijim verzijama sistema Android programeri moraju i da deklarišu vrstu servisa, kao što su reprodukcija medija, lokacija ili sinhronizacija podataka, i da imaju pripadajuće dozvole. Od verzije Android 13 korisnik mora i da odobri dozvolu za obaveštenja, što utiče na to kako se obaveštenje prikazuje.

Koja ograničenja Android postavlja za posao u pozadini?

Radi uštede baterije i zaštite privatnosti korisnika Android je postepeno uvodio ograničenja za posao u pozadini. Od verzije Android 8.0 aplikacije u pozadini uglavnom ne smeju da pokreću obične servise u pozadini, a sistem ih zaustavlja nakon kratkog vremena.

Režim Doze i funkcija App Standby odlažu pristup mreži i poslove kada se uređaj ne koristi ili kada se aplikacija retko koristi. Novije verzije zahtevaju vrste i dozvole za servise u prvom planu i ograničavaju kada se oni smeju pokretati iz pozadine. Pristup lokaciji u pozadini zahteva zasebnu dozvolu. Posao u pozadini zato treba zakazivati bibliotekom WorkManager kad god je to moguće.

Service for dummies

Servis u aplikaciji za Android je svojevrsni nevidljivi pomoćnik koji može da nastavi da radi čak i kada niko ne gleda aplikaciju. Zamislite muzičku aplikaciju: pesma se može pokrenuti, korisnik može da se vrati na početni ekran i napiše poruku, a muzika i dalje svira. O tome se brine servis. Kada aplikacija koristi servis za nešto o čemu korisnik treba da zna, telefon prikazuje malo obaveštenje, pa je jasno da aplikacija radi. Istovremeno Android pazi da aplikacije ne troše previše energije u pozadini, kako bi baterija duže trajala.

Оставите коментар