04. Service ismeretek

Default book

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!

<service android:name="hu.fzolee.fz.trackmobile.Trackmobil" android:exported="true" android:enabled="true"></service>

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.