Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
laboratoare:laborator05 [2016/03/25 02:19]
Andrei Roșu-Cojocaru [Realizarea de Procesări prin Intermediul Alarmelor]
laboratoare:laborator05 [2017/02/20 20:54] (current)
Line 39: Line 39:
   <​application ...>   <​application ...>
     <service     <service
-      android:​name="​ro.pub.cs.systems.eim.lab04.SomeService"​+      android:​name="​ro.pub.cs.systems.eim.lab05.SomeService"​
       android:​enabled="​true"​       android:​enabled="​true"​
       android:​exported="​true"​       android:​exported="​true"​
-      android:​permission="​ro.pub.cs.systems.eim.lab04.SOME_SERVICE_PERMISSION"​ />+      android:​permission="​ro.pub.cs.systems.eim.lab05.SOME_SERVICE_PERMISSION"​ />
   </​application>​   </​application>​
 </​manifest>​ </​manifest>​
Line 154: Line 154:
 <note important>​În cazul metodelor care guvernează ciclul de viață al unui serviciu, NU este obligatoriu să se apeleze metodele din clasa părinte (nu se va genera nici o excepție în această situație).</​note>​ <note important>​În cazul metodelor care guvernează ciclul de viață al unui serviciu, NU este obligatoriu să se apeleze metodele din clasa părinte (nu se va genera nici o excepție în această situație).</​note>​
  
-{{ :​laboratoare:​laborator05:​01service_lifecycle.png?​nolink&​800 }}+{{ :eim:​laboratoare:​laborator05:​service_lifecycle.png?​nolink&​800 }}
  
 Se observă faptul că ciclul de viață al unui serviciu are loc între metodele ''​onCreate()''​ și ''​onDestroy()''​. De cele mai multe ori, este necesar ca un serviciu să folosească unul sau mai multe fire de execuție (dedicate) astfel încât să nu influențeze responsivitatea aplicației Android. Într-o astfel de situație, firul de execuție va fi pornit pe metoda ''​onCreate()''​ și va fi oprit pe metoda ''​onDestroy()''​. De asemenea, în cadrul metodei ''​onCreate()''​ au loc diferite operații de configurare (inițializări),​ în timp ce în cadrul metodei ''​onDestroy()''​ realizează eliberarea resurselor folosite. Metodele ''​onCreate()''​ și ''​onDestroy()''​ sunt invocate pentru toate tipurile de servicii, atât pentru cele de tip started, cât și pentru cele de tip bounded. Se observă faptul că ciclul de viață al unui serviciu are loc între metodele ''​onCreate()''​ și ''​onDestroy()''​. De cele mai multe ori, este necesar ca un serviciu să folosească unul sau mai multe fire de execuție (dedicate) astfel încât să nu influențeze responsivitatea aplicației Android. Într-o astfel de situație, firul de execuție va fi pornit pe metoda ''​onCreate()''​ și va fi oprit pe metoda ''​onDestroy()''​. De asemenea, în cadrul metodei ''​onCreate()''​ au loc diferite operații de configurare (inițializări),​ în timp ce în cadrul metodei ''​onDestroy()''​ realizează eliberarea resurselor folosite. Metodele ''​onCreate()''​ și ''​onDestroy()''​ sunt invocate pentru toate tipurile de servicii, atât pentru cele de tip started, cât și pentru cele de tip bounded.
Line 226: Line 226:
 Pentru oprirea unui serviciu este suficient un singur apel al uneia dintre metodele ''​stopSelf()''​ sau ''​stopService()''​. Pentru oprirea unui serviciu este suficient un singur apel al uneia dintre metodele ''​stopSelf()''​ sau ''​stopService()''​.
  
-== Utilizarea clasei ​PendingIntent ​==+== Utilizarea clasei ​IntentService ​==
  
 Recursul la clasa [[http://​developer.android.com/​reference/​android/​app/​IntentService.html|IntentService]] este adecvată în situația în care se dorește implementarea unor servicii care rulează în fundal, **pe un fir de execuție dedicat** realizând un set de operații la un moment dat de timp, atunci când sunt solicitate. În situația în care serviciul este accesat simultan de mai multe componente ale unei (unor) aplicații Android, procesarea acestora va fi realizată secvențial. Recursul la clasa [[http://​developer.android.com/​reference/​android/​app/​IntentService.html|IntentService]] este adecvată în situația în care se dorește implementarea unor servicii care rulează în fundal, **pe un fir de execuție dedicat** realizând un set de operații la un moment dat de timp, atunci când sunt solicitate. În situația în care serviciul este accesat simultan de mai multe componente ale unei (unor) aplicații Android, procesarea acestora va fi realizată secvențial.
Line 232: Line 232:
 Un obiect de acest tip este lansat în execuție prin pornirea unui serviciu și transmiterea unui obiect de tip ''​Intent''​ care conține toți parametrii necesari pentru realizarea sarcinii respective. Toate operațiile solicitate sunt înregistrate într-o coadă de așteptare și executate succesiv, prin invocarea automată a metodei [[http://​developer.android.com/​reference/​android/​app/​IntentService.html#​onHandleIntent(android.content.Intent)|onHandleIntent()]]. După ce procesarea a fost finalizată,​ procesul se oprește singur (nu este necesar să se apeleze metodele ''​stopSelf()''​ sau ''​stopService()''​ explicit). Un obiect de acest tip este lansat în execuție prin pornirea unui serviciu și transmiterea unui obiect de tip ''​Intent''​ care conține toți parametrii necesari pentru realizarea sarcinii respective. Toate operațiile solicitate sunt înregistrate într-o coadă de așteptare și executate succesiv, prin invocarea automată a metodei [[http://​developer.android.com/​reference/​android/​app/​IntentService.html#​onHandleIntent(android.content.Intent)|onHandleIntent()]]. După ce procesarea a fost finalizată,​ procesul se oprește singur (nu este necesar să se apeleze metodele ''​stopSelf()''​ sau ''​stopService()''​ explicit).
  
-<note tip>​Clasa ''​PendingIntent''​ oferă o implementare implicită a metodelor ''​onStartCommand()''​ care plasează intenția către coada de așteptare și invocă metoda ''​onHandleIntent()''​ precum și a metodei ''​onBind()''​ care întoarce valoarea ''​null''​.</​note>​+<note tip>​Clasa ''​IntentService''​ oferă o implementare implicită a metodelor ''​onStartCommand()''​ care plasează intenția către coada de așteptare și invocă metoda ''​onHandleIntent()''​ precum și a metodei ''​onBind()''​ care întoarce valoarea ''​null''​.</​note>​
  
 Prin urmare, o implementare presupune definirea unei clase derivată din ''​IntentService''​ care suprascrie metoda ''​onHandleIntent()'',​ ce primește ca parametru intenția conținând parametrii ce se doresc a fi procesați, execuția sa fiind realizată (în mod transparent) pe un fir de execuție ce rulează în fundal. De asemenea, trebuie furnizat și un constructor implicit. Prin urmare, o implementare presupune definirea unei clase derivată din ''​IntentService''​ care suprascrie metoda ''​onHandleIntent()'',​ ce primește ca parametru intenția conținând parametrii ce se doresc a fi procesați, execuția sa fiind realizată (în mod transparent) pe un fir de execuție ce rulează în fundal. De asemenea, trebuie furnizat și un constructor implicit.
Line 504: Line 504:
   - utilizarea clasei [[http://​developer.android.com/​reference/​android/​os/​AsyncTask.html|AsyncTask]] permite definirea unei operații care va fi realizată pe un fir de execuție separat, oferind metode care oferă informații cu privire la progres, ce pot fi consultate de alte fire de execuție;   - utilizarea clasei [[http://​developer.android.com/​reference/​android/​os/​AsyncTask.html|AsyncTask]] permite definirea unei operații care va fi realizată pe un fir de execuție separat, oferind metode care oferă informații cu privire la progres, ce pot fi consultate de alte fire de execuție;
   - definirea unei clase derivate din [[http://​developer.android.com/​reference/​android/​content/​Loader.html|Loader]];​   - definirea unei clase derivate din [[http://​developer.android.com/​reference/​android/​content/​Loader.html|Loader]];​
 +  - utilizarea clasei [[http://​developer.android.com/​reference/​android/​os/​Handler.html|Handler]];​
   - implementarea unui fir de execuție definit de utilizator, transmiterea valorilor către interfața grafică fiind realizat prin intermediul clasei [[http://​developer.android.com/​reference/​android/​os/​Handler.html|Handler]].   - implementarea unui fir de execuție definit de utilizator, transmiterea valorilor către interfața grafică fiind realizat prin intermediul clasei [[http://​developer.android.com/​reference/​android/​os/​Handler.html|Handler]].
  
laboratoare/laborator05.1458865160.txt.gz · Last modified: 2017/02/20 20:44 (external edit)
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0