Differences

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

Link to this comparison view

eim:laboratoare:laborator02 [2017/03/03 08:31]
tmp.andrei.cojocaru [Structura unui Proiect Android în Eclipse]
eim:laboratoare:laborator02 [2022/03/14 09:32] (current)
dan_valentin.bina [Ciclul de Viață al unei Activități]
Line 152: Line 152:
 <note tip>​Distincția între cele două situații în care o activitate este distrusă poate fi realizată prin intermediul metodei ''​isFinishing()''​.</​note>​ <note tip>​Distincția între cele două situații în care o activitate este distrusă poate fi realizată prin intermediul metodei ''​isFinishing()''​.</​note>​
  
-{{ :​eim:​laboratoare:​laborator02:​ciclul_de_viata_al_unei_activitati_2.png?​nolink&​700 }}+{{ :​eim:​laboratoare:​laborator02:​ciclul_de_viata_al_unei_activitati_2_nou.png?​nolink&​700 }} 
  
 <note important>​Fiecare dintre metodele ce gestionează ciclul de viață al activității trebuie să apeleze metoda părintelui. În cazul metodei ''​onCreate()'',​ este necesar ca acest lucru să fie realizat la începutul metodei.</​note>​ <note important>​Fiecare dintre metodele ce gestionează ciclul de viață al activității trebuie să apeleze metoda părintelui. În cazul metodei ''​onCreate()'',​ este necesar ca acest lucru să fie realizat la începutul metodei.</​note>​
Line 272: Line 273:
   super.onSaveInstanceState(savedInstanceState);​   super.onSaveInstanceState(savedInstanceState);​
   EditText usernameEditText = (EditText)findViewById(R.id.username_edit_text);​   EditText usernameEditText = (EditText)findViewById(R.id.username_edit_text);​
-  savedInstanceState.putString(Constants.USERNAME_EDIT_TEXT,​ usernameEditText.getText());​+  savedInstanceState.putString(Constants.USERNAME_EDIT_TEXT,​ usernameEditText.getText().toString());
 } }
 </​code>​ </​code>​
Line 325: Line 326:
  
 ==== Coordonarea Activităților ==== ==== Coordonarea Activităților ====
 +<​spoiler>​
 În situația în care o activitate nouă este pornită în timp ce o activitate veche este în execuție, fiind necesară transmiterea de informații dintre acestea, este util să se cunoască ordinea în care sunt apelate metodele care gestionează ciclul de viață al celor două activități,​ astfel încât comunicarea dintre acestea să se realizeze în mod corect: În situația în care o activitate nouă este pornită în timp ce o activitate veche este în execuție, fiind necesară transmiterea de informații dintre acestea, este util să se cunoască ordinea în care sunt apelate metodele care gestionează ciclul de viață al celor două activități,​ astfel încât comunicarea dintre acestea să se realizeze în mod corect:
   - se apelează metoda ''​onPause()''​ a activității vechi - aici trebuie realizată partea de scriere a informațiilor care trebuie să fie trimise;   - se apelează metoda ''​onPause()''​ a activității vechi - aici trebuie realizată partea de scriere a informațiilor care trebuie să fie trimise;
Line 333: Line 334:
  
 {{ :​eim:​laboratoare:​laborator02:​coordonare_activitati.png?​nolink&​400 }} {{ :​eim:​laboratoare:​laborator02:​coordonare_activitati.png?​nolink&​400 }}
 +</​spoiler>​
 ===== Structura unui Proiect Android ===== ===== Structura unui Proiect Android =====
  
-==== Eclipse ====+<​hidden>​ 
 +==== Eclipse ​- nu mai folosim eclipse ​====
  
 Structura unui proiect Android în mediul integrat de dezvoltare Eclipse poate fi observată în fereastra //Package Explorer//. Structura unui proiect Android în mediul integrat de dezvoltare Eclipse poate fi observată în fereastra //Package Explorer//.
Line 592: Line 594:
  
 La compilare, este posibil ca unele clase să nu poată fi rezolvate. Se folosește ''​Ctrl+Shift+O''​ pentru a adăuga automat importurile necesare. La compilare, este posibil ca unele clase să nu poată fi rezolvate. Se folosește ''​Ctrl+Shift+O''​ pentru a adăuga automat importurile necesare.
 +</​hidden>​
 ==== Android Studio ==== ==== Android Studio ====
 +<​spoiler>​
 În Android Studio, există mai multe perspective sub care poate fi vizualizată structura unui proiect: În Android Studio, există mai multe perspective sub care poate fi vizualizată structura unui proiect:
   * Project (reprezintă structura de pe discul fizic)   * Project (reprezintă structura de pe discul fizic)
Line 609: Line 611:
  
 Organizarea unui proiect Android Studio conține următoarele directoare: Organizarea unui proiect Android Studio conține următoarele directoare:
 +
 +{{ :​eim:​laboratoare:​laborator02:​09application_structure_android_studio.png?​nolink&​500 }}
 +
   * .gradle - fișiere temporare Gradle (biblioteci descărcate,​ fișiere de configurare)   * .gradle - fișiere temporare Gradle (biblioteci descărcate,​ fișiere de configurare)
   * .idea - fișiere temporare Android Studio   * .idea - fișiere temporare Android Studio
Line 640: Line 645:
     * local.properties     * local.properties
     * settings.gradle     * settings.gradle
 +</​spoiler>​
  
-=== Gradle ===+==== Gradle ​====
  
 Android Studio folosește un mecanism automat pentru construirea aplicației Android, denumit **Gradle**, responsabil cu aducerea bibliotecilor referite de pe un depozit la distanță, cu definirea proprietăților aplicației Android, cu compilarea și împachetarea tuturor resurselor folosite, pentru rularea și instalarea aplicației astfel rezultate. Android Studio folosește un mecanism automat pentru construirea aplicației Android, denumit **Gradle**, responsabil cu aducerea bibliotecilor referite de pe un depozit la distanță, cu definirea proprietăților aplicației Android, cu compilarea și împachetarea tuturor resurselor folosite, pentru rularea și instalarea aplicației astfel rezultate.
Line 690: Line 696:
 } }
 </​file>​ </​file>​
- 
- 
 ===== Rularea și Depanarea unei aplicații Android ===== ===== Rularea și Depanarea unei aplicații Android =====
  
Line 708: Line 712:
 Depanarea unei aplicații Android poate fi realizată în mod clasic, ca în cazul oricărui proiect (prin stabilirea unor puncte în care execuția codului sursă este întreruptă și rularea pas cu pas) sau prin intermediul unor utilitare specifice. Depanarea unei aplicații Android poate fi realizată în mod clasic, ca în cazul oricărui proiect (prin stabilirea unor puncte în care execuția codului sursă este întreruptă și rularea pas cu pas) sau prin intermediul unor utilitare specifice.
  
 +<​hidden>​
 În cadrul mediului integrat de dezvoltare Eclipse, depanarea unei aplicații este facilitată prin împărțirea ecranului în mai multe perspective între care programatorul are posibilitatea de a comuta: În cadrul mediului integrat de dezvoltare Eclipse, depanarea unei aplicații este facilitată prin împărțirea ecranului în mai multe perspective între care programatorul are posibilitatea de a comuta:
   * Java - pentru realizarea de modificări la nivelul codului sursă   * Java - pentru realizarea de modificări la nivelul codului sursă
Line 715: Line 720:
  
 {{ :​eim:​laboratoare:​laborator02:​eclipse_perspectives_for_android.png?​nolink }} {{ :​eim:​laboratoare:​laborator02:​eclipse_perspectives_for_android.png?​nolink }}
 +</​hidden>​
 === Android Debug Bridge (ADB) === === Android Debug Bridge (ADB) ===
 +
 Android Debug Bridge este un utilitar în linie de comandă care permite comunicarea cu cu un dispozitiv mobil fizic sau cu un emulator, prin intermediul unui program client-server ce include 3 componente: ​ Android Debug Bridge este un utilitar în linie de comandă care permite comunicarea cu cu un dispozitiv mobil fizic sau cu un emulator, prin intermediul unui program client-server ce include 3 componente: ​
-  * un client, apelat prin comanda ''​adb''​ (alți clienți sunt plugin-ul ADT, DDMS-ul, Hierarchy View);+  * un client, apelat prin comanda ''​adb''​ (alți clienți sunt plugin-ul ADT, ADM-ul, Layout Inspector);
   * un server (rulează ca proces de fundal), care gestionează comunicarea dintre client și daemonul ce rulează pe emulator sau dispozitivul mobil fizic;   * un server (rulează ca proces de fundal), care gestionează comunicarea dintre client și daemonul ce rulează pe emulator sau dispozitivul mobil fizic;
   * un daemon, care rulează ca un proces de fundal pentru fiecare emulator sau dispozitiv mobil fizic.   * un daemon, care rulează ca un proces de fundal pentru fiecare emulator sau dispozitiv mobil fizic.
Line 725: Line 732:
   * pentru a folosi ADB shell, device-ul Android trebuie să fie root-at (imaginile genymotion sunt deja).   * pentru a folosi ADB shell, device-ul Android trebuie să fie root-at (imaginile genymotion sunt deja).
   * comenzile ADB pot fi rulate din linia de comandă sau din script, având următorul format:<​code>​   * comenzile ADB pot fi rulate din linia de comandă sau din script, având următorul format:<​code>​
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ adb [-d|-e|-s <​serialNumber>​] <​command>​+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ adb [-d|-e|-s <​serialNumber>​] <​command>​
 </​code>​ </​code>​
   * înainte de a utiliza comenzi ''​adb''​ este important să fie cunoscut identificatorul dispozitivului care este conectat la serverul adb, acesta putând fi identificat prin comanda ''​adb devices'':<​code>​   * înainte de a utiliza comenzi ''​adb''​ este important să fie cunoscut identificatorul dispozitivului care este conectat la serverul adb, acesta putând fi identificat prin comanda ''​adb devices'':<​code>​
-student@eim2016:/​opt/​android-sdk-linux/​platform-tools$ adb devices+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ adb devices
 List of devices attached ​ List of devices attached ​
 emulator-5556 ​          ​device emulator-5556 ​          ​device
Line 771: Line 778:
  
 Există două mecanisme prin care utilizatorii pot genera astfel de mesaje: Există două mecanisme prin care utilizatorii pot genera astfel de mesaje:
-  * metodele statice ale clasei [[http://​developer.android.com/​reference/​android/​util/​Log.html|Log]],​ care primesc ca parametru prioritatea mesajului, eticheta și mesajul propriu zis<code java>​Log.println ​(Log.DEBUG, "log sample",​ "this is a log message using 'log sample'​ tag"​);</​code>​Pentru a se evita specificarea priorității mesajului de fiecare dată, se pot utiliza metode specifice, care primesc ca parametrii doar denumirea etichetei și mesajul ce se dorește a fi jurnalizat:+  * metodele statice ale clasei [[http://​developer.android.com/​reference/​android/​util/​Log.html|Log]],​ care primesc ca parametru prioritatea mesajului, eticheta și mesajul propriu zis<code java>​Log.[wdiea] ​(Log.DEBUG, "log sample",​ "this is a log message using 'log sample'​ tag"​);</​code>​Pentru a se evita specificarea priorității mesajului de fiecare dată, se pot utiliza metode specifice, care primesc ca parametrii doar denumirea etichetei și mesajul ce se dorește a fi jurnalizat:
  
 <​HTML>​ <​HTML>​
Line 797: Line 804:
   * nivelului minim al tipului de mesaj (''​verbose''​ → ''​assert''​)   * nivelului minim al tipului de mesaj (''​verbose''​ → ''​assert''​)
  
-Un filtru se creează prin apăsarea butonului plus de culoare verde din bara panoului Log (respectiv LogCat în Eclipse).+Un filtru se creează prin apăsarea butonului plus de culoare verde din bara panoului Log (respectiv LogCat în Eclipse). ​In Android Studio, LogCat se poate accesa din partea stânga jos a IDE-ului. 
 + 
 +{{ :​eim:​laboratoare:​logcat_2.png?​900&​nolink }}
  
 {{ :​eim:​laboratoare:​laborator02:​logcat_message_filter_settings.png?​nolink }} {{ :​eim:​laboratoare:​laborator02:​logcat_message_filter_settings.png?​nolink }}
Line 805: Line 814:
 {{ :​eim:​laboratoare:​laborator02:​logcat_configuration.png?​nolink&​700 }} {{ :​eim:​laboratoare:​laborator02:​logcat_configuration.png?​nolink&​700 }}
  
-=== Android Device Monitor ===+<​hidden>​ 
 +=== Android Device Monitor ​- deprecated!!! ​===
  
 Utilitarul pentru depanarea aplicațiilor pentru Android se numește **Android Device Monitor** (anterior purta denumirea DDMS - Dalvik Debug Monitor System). Acesta folosește **ADB (Android Debug Bridge)**, pentru a se conecta dispozitive fizice sau la emulatoare. Prin intermediul ADM se pot vizualiza parametrii dispozitivului si a aplicațiilor ce ruleaza pe acesta. În Android Studio, Android Device Monitor este accesibil din //Tools// → //Android// → //Android Device Monitor//. În Eclipse, poate fi accesat sub forma unei perspective,​ care va fi deschisă prin //Window// → //Open Perspective//​ → //​DDMS//​. ​ Utilitarul pentru depanarea aplicațiilor pentru Android se numește **Android Device Monitor** (anterior purta denumirea DDMS - Dalvik Debug Monitor System). Acesta folosește **ADB (Android Debug Bridge)**, pentru a se conecta dispozitive fizice sau la emulatoare. Prin intermediul ADM se pot vizualiza parametrii dispozitivului si a aplicațiilor ce ruleaza pe acesta. În Android Studio, Android Device Monitor este accesibil din //Tools// → //Android// → //Android Device Monitor//. În Eclipse, poate fi accesat sub forma unei perspective,​ care va fi deschisă prin //Window// → //Open Perspective//​ → //​DDMS//​. ​
Line 823: Line 833:
  
 **Procese și Fire de Execuție** **Procese și Fire de Execuție**
- 
 În panoul **//​Threads//​** sunt afișate informațiile despre fiecare fir de execuție corespunzător unui proces. Întrucât aceste informații sunt preluate prin intermediul unei legături de rețea, astfel încât traficul generat este destul de mare, pentru nu a se încetini semnificativ funcționarea dispozitivului mobil (care este nevoit sa transmită aceste date permanent), vizualizarea trebuie activată manual. Astfel, se selectează dispozitivul mobil dorit și procesul respectiv (din panoul //​Devices//​) și se apasă butonul //​Refresh//​. În panoul **//​Threads//​** sunt afișate informațiile despre fiecare fir de execuție corespunzător unui proces. Întrucât aceste informații sunt preluate prin intermediul unei legături de rețea, astfel încât traficul generat este destul de mare, pentru nu a se încetini semnificativ funcționarea dispozitivului mobil (care este nevoit sa transmită aceste date permanent), vizualizarea trebuie activată manual. Astfel, se selectează dispozitivul mobil dorit și procesul respectiv (din panoul //​Devices//​) și se apasă butonul //​Refresh//​.
  
 {{ :​eim:​laboratoare:​laborator02:​ddms_threads.png?​nolink&​600 }} {{ :​eim:​laboratoare:​laborator02:​ddms_threads.png?​nolink&​600 }}
- 
 **Utilizarea Memoriei** **Utilizarea Memoriei**
- 
 DDMS oferă posibilitatea de a monitoriza utilizarea memoriei în cadrul panourilor **//​Heap//​** și **//​Allocation Tracker//​**,​ oferind informații cu privire la gradul de ocupare a memoriei, defalcată pe tipuri de obiecte (obiecte, clase, tablouri conținând elemente stocate pe 1, 2, 4, 8 octeți, date non-Java). ​ DDMS oferă posibilitatea de a monitoriza utilizarea memoriei în cadrul panourilor **//​Heap//​** și **//​Allocation Tracker//​**,​ oferind informații cu privire la gradul de ocupare a memoriei, defalcată pe tipuri de obiecte (obiecte, clase, tablouri conținând elemente stocate pe 1, 2, 4, 8 octeți, date non-Java). ​
  
 {{ :​eim:​laboratoare:​laborator02:​ddms_heap.png?​nolink&​600 }} {{ :​eim:​laboratoare:​laborator02:​ddms_heap.png?​nolink&​600 }}
- 
 **Sistemul de Fișiere** **Sistemul de Fișiere**
- 
 Consultarea sistemului de fișiere al dispozitivului mobil poate fi realizat prin intermediul panoului **//File Explorer//​**,​ putând fi vizualizate datele aplicației,​ stocate în ''​data/​data/<​package-name>'',​ unde ''<​package-name>''​ este denumirea pachetului corespunzător aplicației investigate. Consultarea sistemului de fișiere al dispozitivului mobil poate fi realizat prin intermediul panoului **//File Explorer//​**,​ putând fi vizualizate datele aplicației,​ stocate în ''​data/​data/<​package-name>'',​ unde ''<​package-name>''​ este denumirea pachetului corespunzător aplicației investigate.
- 
 {{ :​eim:​laboratoare:​laborator02:​ddms_file_explorer.png?​nolink&​600 }} {{ :​eim:​laboratoare:​laborator02:​ddms_file_explorer.png?​nolink&​600 }}
 +</​hidden>​
 **Simularea unor evenimente de tip întrerupere pentru emulator** **Simularea unor evenimente de tip întrerupere pentru emulator**
- +<​spoiler>​ 
-Întrucât emulatorul de Android nu poate simula toate funcțiile unui telefon real, pentru a se putea testa comportamentul aplicațiilor în cazul apariției unor evenimente de tip întrerupere,​ DDMS pune la dispoziție un panou **//​Emulator Control//​**,​ prin care pot fi controlate:+Întrucât emulatorul de Android nu poate simula toate funcțiile unui telefon real, pentru a se putea testa comportamentul aplicațiilor în cazul apariției unor evenimente de tip întrerupere,​ DDMS(deprecated) ​pune la dispoziție un panou **//​Emulator Control//​**,​ prin care pot fi controlate:
   * starea conexiunii de voce / date   * starea conexiunii de voce / date
   * primirea unui apel telefonic / SMS (apel, pierdere apel)   * primirea unui apel telefonic / SMS (apel, pierdere apel)
Line 856: Line 860:
   * cameră foto   * cameră foto
   * accelerometru   * accelerometru
 +</​spoiler>​
 === Layout Inspector === === Layout Inspector ===
 +<​spoiler>​
 Un alt program foarte util pentru depanare este **Layout Inspector** (anterior, purta denumirea Hierarchy View). Acesta permite vizualizarea arborescentă a structurii ferestrelor. De asemenea, afișează parametrii fiecărui ''​View'',​ inclusiv timpul de încărcare. O altă funcționalitate pusă la dispoziția programatorilor este posibilitatea capturării unei imagini a View-ului. ​ Un alt program foarte util pentru depanare este **Layout Inspector** (anterior, purta denumirea Hierarchy View). Acesta permite vizualizarea arborescentă a structurii ferestrelor. De asemenea, afișează parametrii fiecărui ''​View'',​ inclusiv timpul de încărcare. O altă funcționalitate pusă la dispoziția programatorilor este posibilitatea capturării unei imagini a View-ului. ​
  
Line 882: Line 886:
  
 {{ :​eim:​laboratoare:​laborator02:​hierarchy_view_layout_view.png?​nolink }} {{ :​eim:​laboratoare:​laborator02:​hierarchy_view_layout_view.png?​nolink }}
 +</​spoiler>​
  
 ===== Activitate de Laborator ===== ===== Activitate de Laborator =====
Line 887: Line 892:
 **1.** În contul Github personal, să se creeze un depozit denumit '​Laborator02'​. 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 '​Laborator02'​. 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/​Laborator02|]]. În urma acestei operații, directorul Laborator02 va trebui să se conțină un director ''​labtasks''​ ce va deține proiectul Android Studio denumit ''​ActivityLifecycleMonitor'',​ fișierul ''​README.md''​ și un fișier ''​.gitignore''​ care indică tipurile de fișiere (extensiile) ignorate. <​code>​ +**2.** Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​eim-lab/​Laborator02|]]. În urma acestei operații, directorul Laborator02 va trebui să se conțină un director ''​labtasks''​ ce va deține proiectul Android Studio denumit ''​ActivityLifecycleMonitor'',​ fișierul ''​README.md''​ și un fișier ''​.gitignore''​ care indică tipurile de fișiere (extensiile) ignorate. <​code>​ 
-student@eim2017:~$ git clone https://​www.github.com/​eim2017/​Laborator02.git+student@eim-lab:~$ git clone https://​www.github.com/​eim-lab/​Laborator02.git
 </​code>​ </​code>​
  
 **3.** Să se încarce conținutul descărcat în cadrul depozitului '​Laborator02'​ de pe contul Github personal. ​ <​code>​ **3.** Să se încarce conținutul descărcat în cadrul depozitului '​Laborator02'​ de pe contul Github personal. ​ <​code>​
-student@eim2017:~$ cd Laborator02 +student@eim-lab:~$ cd Laborator02 
-student@eim2017:​~/​Laborator02$ git remote add Laborator02_perfectstudent https://​github.com/​perfectstudent/​Laborator02 +student@eim-lab:​~/​Laborator02$ git remote add Laborator02_perfectstudent https://​github.com/​perfectstudent/​Laborator02 
-student@eim2017:​~/​Laborator02$ git push Laborator02_perfectstudent master+student@eim-lab:​~/​Laborator02$ git push Laborator02_perfectstudent master
 </​code>​ </​code>​
  
-**4.** Să se încarce în mediul integrat de dezvoltare ​Eclipse ​proiectul ''​ActivityLifecycleMonitor'',​ folosind opțiunea //File// → //Import...//.+**4.** Să se încarce în mediul integrat de dezvoltare ​Android Studio ​proiectul ''​ActivityLifecycleMonitor'',​ folosind opțiunea //Open an Existing Android Studio Project//.
  
-{{ :​eim:​laboratoare:​laborator02:​eclipse_import_project01.png?​nolink&​500 }}+{{ :​eim:​laboratoare:​laborator02:​android_studio_open_project01.png?​nolink&​600 }}
  
-{{ :​eim:​laboratoare:​laborator02:​eclipse_import_project02.png?​nolink&​500 }}+{{ :​eim:​laboratoare:​laborator02:​android_studio_open_project02.png?​nolink&​300 }}
  
 **5.** În clasa ''​LifecycleMonitorActivity''​ din pachetul ''​ro.pub.cs.systems.eim.lab02.activitylifecyclemonitor.graphicuserinterface'',​ să se suprascrie metodele care monitorizează ciclul de viață al unei activități;​ fiecare dintre acestea va trebui **să apeleze metoda părinte** și **să notifice apelarea sa prin intermediul unui mesaj**, având prioritatea ''​DEBUG''​ și eticheta ''​activitylifecyclemonitor'':<​code java> **5.** În clasa ''​LifecycleMonitorActivity''​ din pachetul ''​ro.pub.cs.systems.eim.lab02.activitylifecyclemonitor.graphicuserinterface'',​ să se suprascrie metodele care monitorizează ciclul de viață al unei activități;​ fiecare dintre acestea va trebui **să apeleze metoda părinte** și **să notifice apelarea sa prin intermediul unui mesaj**, având prioritatea ''​DEBUG''​ și eticheta ''​activitylifecyclemonitor'':<​code java>
Line 913: Line 918:
     - ''​onDestroy()''​     - ''​onDestroy()''​
  
-**6.** Să se creeze un filtru, denumit ''​ActivityLifecycleMonitor'',​ astfel încât LogCat să afișeze doar mesajele care au eticheta ''​activitylifecyclemonitor'',​ generate de aplicația ''​ro.pub.cs.systems.eim.lab02.activitylifecyclemonitor''​ și au cel puțin prioritatea ''​debug''​.+**6.** Să se creeze un filtru, denumit ''​ActivityLifecycleMonitor'',​ astfel încât LogCat să afișeze doar mesajele care au eticheta ''​activitylifecycle'',​ generate de aplicația ''​ro.pub.systems.eim.lab02.activitylifecyclemonitor''​ și au cel puțin prioritatea ''​debug''​.
  
 **7.** Să se modifice mesajul din metoda ''​onCreate()'',​ astfel încât să se indice dacă activitatea a mai fost lansată în execuție anterior sau nu (dacă există o stare a activității care trebuie restaurată). **7.** Să se modifice mesajul din metoda ''​onCreate()'',​ astfel încât să se indice dacă activitatea a mai fost lansată în execuție anterior sau nu (dacă există o stare a activității care trebuie restaurată).
Line 921: Line 926:
     - se apasă butonul //Back//     - se apasă butonul //Back//
     - se apasă butonul //OK// din cadrul aplicației (indiferent dacă datele de autentificare sunt corecte sau nu)     - se apasă butonul //OK// din cadrul aplicației (indiferent dacă datele de autentificare sunt corecte sau nu)
-    - se ține apăsat butonul //Home// o perioadă de timp mai mare+    - se apasă butonul //lista app// 
     - se primește un apel telefonic\\ a) pentru AVD, se poate folosi //ADM// → //Emulator Control//\\ b) pentru Genymotion se poate simula doar formarea unui număr de telefon <​code>​     - se primește un apel telefonic\\ a) pentru AVD, se poate folosi //ADM// → //Emulator Control//\\ b) pentru Genymotion se poate simula doar formarea unui număr de telefon <​code>​
-student@eim2016:/​opt/​android-sdk-linux/​platform-tools$ adb devices+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ adb devices
 List of devices attached ​ List of devices attached ​
 192.168.56.101:​5555 device 192.168.56.101:​5555 device
-student@eim2017:/​opt/​android-sdk-linux/​platform-tools$ adb -s 192.168.56.101:​5555 shell+student@eim-lab:/​opt/​android-sdk-linux/​platform-tools$ adb -s 192.168.56.101:​5555 shell
 root@android:/​ # am start -a android.intent.action.CALL tel:​1122334455 root@android:/​ # am start -a android.intent.action.CALL tel:​1122334455
 Starting: Intent { act=android.intent.action.CALL dat=tel:​xxxxxxxxxx } Starting: Intent { act=android.intent.action.CALL dat=tel:​xxxxxxxxxx }
Line 940: Line 945:
 | 2) buton //Back// |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  | | 2) buton //Back// |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
 | 3) buton //OK// din aplicație |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  | | 3) buton //OK// din aplicație |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
-| 4) buton //Home// perioadă de timp mai mare |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |+| 4) buton //lista app//  |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
 | 5) apel telefonic |   ​||||||| | 5) apel telefonic |   ​|||||||
 | a) acceptare |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  | | a) acceptare |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
 | b) respingere |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  | | b) respingere |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
 | 6) rotire ecran |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  | | 6) rotire ecran |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
 +
 +<​hidden>​
 +2019, genymotion, Nexus 5X API 24, butoane "​hardware"​
 +
 +^  ^  ''​onCreate()'' ​ ^  ''​onRestart()'' ​ ^  ''​onStart()'' ​ ^  ''​onResume()'' ​ ^  ''​onPause()'' ​ ^  ''​onStop()'' ​ ^  ''​onDestroy()'' ​ ^ ''​onSaveInst()'' ​ ^ ''​onRestoreInst()'' ​ ^
 +| 1) buton //Home// |   ​| ​  ​| ​   |    |  1  |  3  |   ​| ​ 2  |   |
 +| 2) buton //Back// |   ​| ​  ​| ​   |    |  1  |  2  |  3  |     ​| ​  |
 +| 3) buton //OK// din aplicație |  nici | una   | dintre ​  | metode ​ | nu   | se  | apelează ​ |
 +| 4) buton //lista app//  |   ​| ​  ​| ​  ​| ​  ​| ​ 1  |  3  |   ​| ​ 2  | |  ​
 +| 5) apel telefonic |   | | | |  1  |  3  | |  2  | |  ​
 +| a) acceptare |   ​| ​ 1  |  2  |   ​| ​   |    |   ​| ​ |  | 
 +| b) respingere |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
 +| 6) rotire ecran |  5  |   ​| ​ 6  |   ​| ​ 1  |  3  |  4  |  2  |  7  |
 +
 +Galaxy S7, butoane hw 
 +^  ^  ''​onCreate()'' ​ ^  ''​onRestart()'' ​ ^  ''​onStart()'' ​ ^  ''​onResume()'' ​ ^  ''​onPause()'' ​ ^  ''​onStop()'' ​ ^  ''​onDestroy()'' ​ ^ ''​onSaveInst()'' ​ ^ ''​onRestoreInst()'' ​ ^
 +| 1) buton //Home// |   ​| ​  ​| ​   |    |  1  |  3  |   ​| ​ 2  |   |
 +| 2) buton //Back// |   ​| ​  ​| ​   |    |  1  |  2  |  3  |     ​| ​  |
 +| 3) buton //OK// din aplicație |  nici | una   | dintre ​  | metode ​ | nu   | se  | apelează ​ |
 +| 4) buton //lista app//  |   ​| ​  ​| ​  ​| ​  ​| ​ 1  |  3  |   ​| ​ 2  | |  ​
 +| 5) apel telefonic |   ​|||||||
 +| a) acceptare |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
 +| b) respingere |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
 +| 6) rotire ecran |   ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  ​| ​  |
 +
 +
 +
 +</​hidden>​
 +
  
 **9.** Să se dezactiveze opțiunea de salvare a stării. ​ **9.** Să se dezactiveze opțiunea de salvare a stării. ​
Line 950: Line 984:
 <note tip>În fișierul ''​activity_lifecycle_monitor.xml'',​ pentru fiecare dintre elementele grafice pentru care se dorește să se dezactiveze opțiunea de salvare a stării, se va completa proprietatea ''​android:​saveEnabled="​false"''​.</​note>​ <note tip>În fișierul ''​activity_lifecycle_monitor.xml'',​ pentru fiecare dintre elementele grafice pentru care se dorește să se dezactiveze opțiunea de salvare a stării, se va completa proprietatea ''​android:​saveEnabled="​false"''​.</​note>​
  
-Să se observe care este comportamentul în privința informațiilor reținute în elementele grafice de tip ''​EditText'',​ respectiv ''​CheckBox'',​ în condițiile în care activitatea este distrusă (se apasă butonul //Home//, astfel încât să se apeleze metodele ''​onPause()''​ și ''​onStop()'',​ apoi, în DDMS, în panoul //​Devices//, ​se identifică procesul corespunzător ​aplicației și se oprește folosind butonul //Stop Process//). Să se repornească aplicația din meniul dispozitivului mobil. ​+Să se observe care este comportamentul în privința informațiilor reținute în elementele grafice de tip ''​EditText'',​ respectiv ''​CheckBox'',​ în condițiile în care activitatea este distrusă (se apasă butonul //Home//, astfel încât să se apeleze metodele ''​onPause()''​ și ''​onStop()'',​ apoi se închide ​aplicația. Să se repornească aplicația din meniul dispozitivului mobil. ​
  
 **10.** Să se implementeze metoda ''​onSaveInstanceState()'',​ astfel încât, **în condițiile în care este bifat elementul grafic de tip ''​CheckBox''​**,​ să se salveze informațiile din interfața cu utilizatorul. **10.** Să se implementeze metoda ''​onSaveInstanceState()'',​ astfel încât, **în condițiile în care este bifat elementul grafic de tip ''​CheckBox''​**,​ să se salveze informațiile din interfața cu utilizatorul.
Line 963: Line 997:
  
 **12.** ​ Să se încarce modificările realizate în cadrul depozitului '​Laborator02'​ de pe contul Github personal, folosind un mesaj sugestiv. <​code>​ **12.** ​ Să se încarce modificările realizate în cadrul depozitului '​Laborator02'​ de pe contul Github personal, folosind un mesaj sugestiv. <​code>​
-student@eim2017:​~/​Laborator02$ git add labtasks/​* +student@eim-lab:​~/​Laborator02$ git add labtasks/​* 
-student@eim2017:​~/​Laborator02$ git commit -m "​implemented ​taks for laboratory 02" +student@eim-lab:​~/​Laborator02$ git commit -m "​implemented ​tasks for laboratory 02" 
-student@eim2017:​~/​Laborator02$ git push Laborator02_perfectstudent master+student@eim-lab:​~/​Laborator02$ git push Laborator02_perfectstudent master
 </​code>​ </​code>​
  
eim/laboratoare/laborator02.1488522689.txt.gz · Last modified: 2017/03/03 08:31 by tmp.andrei.cojocaru
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