Differences

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

Link to this comparison view

eim:laboratoare:laborator05 [2017/03/28 14:00]
dragos.niculescu
eim:laboratoare:laborator05 [2021/04/04 23:29] (current)
madalina.barbu [Activitate de Laborator]
Line 49: Line 49:
 Αtributul [[http://​developer.android.com/​guide/​topics/​manifest/​service-element.html#​nm|android:​name]] este singurul **obligatoriu** în cadrul elementului ''<​service>'',​ desemnând clasa care gestionează operațiile specifice serviciului respectiv. Din momentul în care aplicația Android este publicată, această valoare nu mai poate fi modificată,​ întrucât poate avea un efect asupra componentelor care utilizează acest serviciu prin intermediul unei intenții explicite folosită la pornirea serviciului sau la asocierea componentei cu serviciul respectiv. Αtributul [[http://​developer.android.com/​guide/​topics/​manifest/​service-element.html#​nm|android:​name]] este singurul **obligatoriu** în cadrul elementului ''<​service>'',​ desemnând clasa care gestionează operațiile specifice serviciului respectiv. Din momentul în care aplicația Android este publicată, această valoare nu mai poate fi modificată,​ întrucât poate avea un efect asupra componentelor care utilizează acest serviciu prin intermediul unei intenții explicite folosită la pornirea serviciului sau la asocierea componentei cu serviciul respectiv.
  
-<note warning>​Pentru a asigura securitatea aplicației Android, se recomandă să se folosească numai **intenții explicite** pentru pornirea unui serviciu. Nu este recomandat să se utilizeze filtre de intenții, astfel încât acestea nu ar trebui să se regăsească în fișierul ''​ΑndroidManifest.xml''​. Totuși, în situația în care acest lucru este absolut necesar, ar trebui să se indice intenției măcar pachetul în care se regăsește serviciul respectiv.</​note>​+<note warning>​Pentru a asigura securitatea aplicației Android, se recomandă să se folosească numai **intenții explicite** pentru pornirea unui serviciu. Nu este recomandat să se utilizeze filtre de intenții, astfel încât acestea nu ar trebui să se regăsească în fișierul ''​ΑndroidManifest.xml''​. Totuși, în situația în care acest lucru este absolut necesar, ar trebui să se indice intenției măcar pachetul în care se regăsește serviciul respectiv. Începând cu Android 5.0, tentativa de pornire a unui serviciu folosind intenții implicite determină excepție, fiind nepermisă.</​note>​
  
 Atributul ''​android:​enabled''​ indică dacă serviciul poate fi instanțiat de către sistemul de operare. Atributul ''​android:​enabled''​ indică dacă serviciul poate fi instanțiat de către sistemul de operare.
Line 314: Line 314:
  
 === Servicii de tip Bounded === === Servicii de tip Bounded ===
 +<spoiler (Opțional)> ​
 Un serviciu de tip bounded implică o interacțiune permanentă cu una sau mai multe componente ale unei (unor) aplicații Android. Astfel, serviciul poate expune o anumită funcționalitate către componentele aplicației Android (prin intermediul unei interfețe) sau poate fi utilizat ca mecanism de comunicație inter-proces,​ pentru transmiterea de informații între acestea. Un serviciu de tip bounded implică o interacțiune permanentă cu una sau mai multe componente ale unei (unor) aplicații Android. Astfel, serviciul poate expune o anumită funcționalitate către componentele aplicației Android (prin intermediul unei interfețe) sau poate fi utilizat ca mecanism de comunicație inter-proces,​ pentru transmiterea de informații între acestea.
  
Line 451: Line 451:
  
 Dacă este necesar ca procesarea să fie realizată simultan, poate fi utilizat AIDL (Android Interface Definition Language) care realizează transformarea dintre obiecte și primitive la nivelul sistemului de operare prin intermediul cărora se realizează comunicația inter-proces. În această situație, trebuie avut în vedere faptul că sincronizarea dintre diferitele fire de execuție trebuie realizată manual, operație destul de complexă. Pe baza fișierului ''​.aidl''​ care descrie interfața de programare, se va genera o clasă abstractă responsabilă cu comunicația inter-proces,​ din care va fi derivat serviciul respectiv. Dacă este necesar ca procesarea să fie realizată simultan, poate fi utilizat AIDL (Android Interface Definition Language) care realizează transformarea dintre obiecte și primitive la nivelul sistemului de operare prin intermediul cărora se realizează comunicația inter-proces. În această situație, trebuie avut în vedere faptul că sincronizarea dintre diferitele fire de execuție trebuie realizată manual, operație destul de complexă. Pe baza fișierului ''​.aidl''​ care descrie interfața de programare, se va genera o clasă abstractă responsabilă cu comunicația inter-proces,​ din care va fi derivat serviciul respectiv.
 +</​spoiler> ​
 ==== Prioritatea unui Serviciu ==== ==== Prioritatea unui Serviciu ====
  
Line 689: Line 689:
  
 ===== Utilitare ===== ===== Utilitare =====
-  * Listare servicii din acest laborator <​code>​ adb shell dumpsys activity services | grep lab05 </​code>​+  * Listare servicii din acest laborator <​code>​ adb shell dumpsys activity services ​| grep lab05 </​code>,​ doar cele pornite sunt afișate 
 +  * Listare pachete <​code>​ adb shell pm list packages -f | grep lab05</​code>​
   * Oprire forțată a unui serviciu <​code>​am force-stop ro.pub.cs.systems.eim.lab05.startedservice</​code>​   * Oprire forțată a unui serviciu <​code>​am force-stop ro.pub.cs.systems.eim.lab05.startedservice</​code>​
 +  * Pornire <​code>​am startservice ro.pub.cs.systems.eim.lab05.startedservice/​.service.StartedService </​code>​
 +  * Pornire în oreo <​code>​am start-foreground-service ro.pub.cs.systems.eim.lab05.startedservice/​.service.StartedService </​code>​
   * Utilitarul MyAndroidTools (preinstalat în genymotion) listează activitățile și serviciile unei aplicații. Pentru servicii sunt două coloane: servicii pornite (albastru) si servicii disponibile(negru).  ​   * Utilitarul MyAndroidTools (preinstalat în genymotion) listează activitățile și serviciile unei aplicații. Pentru servicii sunt două coloane: servicii pornite (albastru) si servicii disponibile(negru).  ​
 +  * În Android Studio/​Tool/​Android/​Android Device Monitor - se deschide perspectiva DDMS care oferă control asupra proceselor și thread-urilor care rulează în emulator/​telefon. ​
  
 ===== Activitate de Laborator ===== ===== Activitate de Laborator =====
Line 697: Line 701:
 **1.** În contul Github personal, să se creeze un depozit denumit '​Laborator05'​. Inițial, acesta trebuie să fie gol (nu trebuie să bifați nici adăugarea unui fișier README.md, nici a fișierului .gitignore sau a a fișierului LICENSE). **1.** În contul Github personal, să se creeze un depozit denumit '​Laborator05'​. Inițial, acesta trebuie să fie gol (nu trebuie să bifați nici adăugarea unui fișier README.md, nici a fișierului .gitignore sau a a fișierului LICENSE).
  
-**2.** Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la https://​www.github.com/​eim2017/​Laborator05. În urma acestei operații, directorul Laborator05 va trebui să se conțină un director ''​labtasks''​ ce va deține proiectele AndroidStudio,​ fișierul README.md și un fișier .gitignore care indică tipurile de fișiere (extensiile) ignorate.+**2.** Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la https://​www.github.com/​eim-lab/​Laborator05. În urma acestei operații, directorul Laborator05 va trebui să se conțină un director ''​labtasks''​ ce va deține proiectele AndroidStudio,​ fișierul README.md și un fișier .gitignore care indică tipurile de fișiere (extensiile) ignorate.
  
 <​code>​ <​code>​
-student@eim2017:~$ git clone https://​www.github.com/​eim2017/​Laborator05.git+student@eim:~$ git clone https://​www.github.com/​eim-lab/​Laborator05.git
 </​code>​ </​code>​
  
Line 706: Line 710:
  
 <​code>​ <​code>​
-student@eim2017:~$ cd Laborator05 +student@eim:~$ cd Laborator05 
-student@eim2017:​~/​Laborator05$ git remote add Laborator05_perfectstudent https://​github.com/​perfectstudent/​Laborator05 +student@eim:​~/​Laborator05$ git remote add Laborator05_perfectstudent https://​github.com/​perfectstudent/​Laborator05 
-student@eim2017:​~/​Laborator05$ git push Laborator05_perfectstudent master+student@eim:​~/​Laborator05$ git push Laborator05_perfectstudent master
 </​code>​ </​code>​
  
Line 948: Line 952:
 </​spoiler>​ </​spoiler>​
  
-**10.** Să se încarce în mediul integrat de dezvoltare Android Studio proiectul //​BoundedServiceActivity//​ din directorul ''​labtasks/​BoundedService''​. Se dorește să se implementeze un serviciu de tip bounded care poate interacționa cu o activitate prin intermediul unei metode care furnizează un șir de caractere ales aleator dintr-o listă de valori.+**10.** **[Opțional]** Să se încarce în mediul integrat de dezvoltare Android Studio proiectul //​BoundedServiceActivity//​ din directorul ''​labtasks/​BoundedService''​. Se dorește să se implementeze un serviciu de tip bounded care poate interacționa cu o activitate prin intermediul unei metode care furnizează un șir de caractere ales aleator dintr-o listă de valori.
  
 **a)** În clasa ''​BoundedService''​ din pachetul ''​ro.pub.cs.systems.eim.lab05.boundedserviceactivity.service'',​ să se implementeze o clasă internă **publică**,​ derivată din interfața [[http://​developer.android.com/​reference/​android/​os/​IBinder.html|IBinder]],​ care oferă o referință către serviciu prin intermediul metodei **publice** ''​getService()''​. Instanța acestei clase interne va fi furnizată ca rezultat al metodei [[http://​developer.android.com/​reference/​android/​app/​Service.html#​onBind%28android.content.Intent%29|onBind()]]. **a)** În clasa ''​BoundedService''​ din pachetul ''​ro.pub.cs.systems.eim.lab05.boundedserviceactivity.service'',​ să se implementeze o clasă internă **publică**,​ derivată din interfața [[http://​developer.android.com/​reference/​android/​os/​IBinder.html|IBinder]],​ care oferă o referință către serviciu prin intermediul metodei **publice** ''​getService()''​. Instanța acestei clase interne va fi furnizată ca rezultat al metodei [[http://​developer.android.com/​reference/​android/​app/​Service.html#​onBind%28android.content.Intent%29|onBind()]].
Line 1045: Line 1049:
  
 <​code>​ <​code>​
-student@eim2017:​~/​Laborator05$ git add labtasks/​* +student@eim:​~/​Laborator05$ git add labtasks/​* 
-student@eim2017:​~/​Laborator05$ git commit -m "​implemented taks for laboratory 05" +student@eim:​~/​Laborator05$ git commit -m "​implemented taks for laboratory 05" 
-student@eim2017:​~/​Laborator05$ git push Laborator05_perfectstudent master+student@eim:​~/​Laborator05$ git push Laborator05_perfectstudent master
 </​code>​ </​code>​
 ===== Resurse Utile ===== ===== Resurse Utile =====
Line 1060: Line 1064:
 [[http://​ptgmedia.pearsoncmg.com/​images/​9780321940261/​samplepages/​0321940261.pdf|Joseph ANNUZZI, Jr, Lauren DARCEY, Shane CONDER, Introduction to Android Application Development - Developer'​s Library, 4th Edition, Addison-Wesley,​ 2013]] - capitolul 4, subcapitolele //Working with Services//, //Receiving and Broadcasting Intents//​\\ ​ [[http://​ptgmedia.pearsoncmg.com/​images/​9780321940261/​samplepages/​0321940261.pdf|Joseph ANNUZZI, Jr, Lauren DARCEY, Shane CONDER, Introduction to Android Application Development - Developer'​s Library, 4th Edition, Addison-Wesley,​ 2013]] - capitolul 4, subcapitolele //Working with Services//, //Receiving and Broadcasting Intents//​\\ ​
 [[http://​www.bignerdranch.com/​we-write/​android-programming/​|Bill PHILLIPS, Brian HARDY, Android Programming. The Big Nerd Ranch Guide, Pearson Technology Group, 2013]] - capitolele 29 (//​Background Services//​),​ 30 (//​Broadcast Intents//​)\\ ​ [[http://​www.bignerdranch.com/​we-write/​android-programming/​|Bill PHILLIPS, Brian HARDY, Android Programming. The Big Nerd Ranch Guide, Pearson Technology Group, 2013]] - capitolele 29 (//​Background Services//​),​ 30 (//​Broadcast Intents//​)\\ ​
 +
 +===== Android Developer Fundamentals =====
 +[[https://​docs.google.com/​presentation/​d/​1SdawmBYLrDKcLxwtvB09B5ffK7Bd9cj-677qI5Unekg/​edit#​slide=id.g116d7d9d49_3_13 | Services]]\\
 +[[https://​docs.google.com/​presentation/​d/​1A7anDTS8NQCunbxoJnqJqkSHNFCvRIn9moE7Zww-gds/​edit#​slide=id.g116d7d9d49_3_13 | AsyncTask]]\\
 +[[https://​docs.google.com/​presentation/​d/​1qF9Yeau7uHIP7_aOHWgPU_RnfxACZzGyAZIzcJWz0R0/​edit#​slide=id.g116d7d9d49_3_13 | Broadcasts]]
eim/laboratoare/laborator05.1490698834.txt.gz · Last modified: 2017/03/28 14:00 by dragos.niculescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0