Az Android operációs rendszerben, mint minden más rendszerben is sok program fut a háttérben, amelyeknek nincsen felhasználói felülete. Az egyszerűség kedvéért azokat a programokat, amelyeknek nincsen felhasználói felülete Service-nek hívjuk. Például a levelek beérkezéséért, vagy egy telefonhívás beérkezését figyelő, vagy GPS adatok rögzítéséért felelős alkalmazás mind mind service-ként fut a háttérben.
A Service-ek tulajdonságai:
- A Service akkor is tovább futhat, ha az alkalmazás minden Activity-je befejeződött (pl. GPS adatok gyűjtése)
- A Service bizonyos szolgáltatásait más programok is használhatják
- A Service periodikusan, ütemezve is futhat.
Mint minden más program komponenst egy Service-t is külön fájlban szabad létrehozni, importálni kell a megfelelő osztályokat.
A Service osztéály minden szolgáltatás őse.
A Service-eket be kell jegyezni a manifest fájlba!
Az Attributumok egy részét az android Studio automatikusan beteszi a manifest fájlba, de ha más alkalmazást használunk akkor kézzel kell beírni azokat. mik ezek az attribútumok?
- name: A rendszerben futó szerviz egyedi azonosító neve. Kötelező elem.
- exported: Más alkalmazások használhatják-e a Service-t vagy nem. Ha true, akkor igen. A default értéke attól függ, hogy a Service-hez adunk-e filtereket. Ha igen, akkor ture, különben false. Célszerű eleve meghatározni az értékét.
- permission: meghatározza, hogy milyen jogosultságokkal kell rendelkeznie a Service-t hívó alkalmazásnak (Mihez férhet hozzá). Default az őt indító alkalmazás jogosítványai lesznek.
- icon: A Service ikonja,. Ha nem adjuk meg, akkor az lesz, mint az őt hívó alkalmazás ikonja
- label: A Service listákban megjelenő neve.
- process: A Process neve, amely a service-ben fut. Ha nincs megadva, akkor az alkalmazás processzben fut. Ha a processznév : tal kezdődik, akkor a Service indításakor új processz indul ezen a néven.
- enabled: Ha értéke false, akkor a Service nem indulhat el, de később a Service-t programból true-ra állíthajtuk.
Service-ek két fő típusa: Started és a Bound
A Started szolgáltatás indítását egy Intent üzenettel érjük el. Ettől kezdve a Service beindul. A hívó komponens a Servie-től visszakaphat információt, de ezt külön kell programozni.
A Bound szolgáltatások tetszőleges számú metódust tartalmazhatnak, amelyeket más alkalmazás meghívhat és így információt kaphat a Service állapotáról.
A Service-ek egyszerre mind a két típusba is sorolhatóak.
Service-k futása a fő szálban
A Service futása független az őt létrehozó alkalmazás futásától, és általában egy programozási szálban fut (thread). Alapesetben az őt lérehozó alkalmazás fő szálában fut! Mivel a fő szál az Android alkalmazások esetén egy Activity, azaz felhasználói felülete van, ezért ha a Service tovább fut, mint 5 sec, akkor a rendszer timeoutra fut "Application Not Responding" üzenettel elszáll.
Ennek a kivédésére a Service-knek egy vagy több háttérszálat kell indítani, amelyek függetlenül futnak a fő száltól és a fő szálban csak azt szabad elindítani, amely garantáltan lefut 5 sec alatt.
Az IntentService osztály garantáltan külön szálban futtatja a kódunkat, tehát érdemes azt használni.
Egy általunk megadott processz szálában is futhat a Service, amit a manifest állományan kell megadni - ahogyan korábban is írtam.