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:laborator02 [2015/03/02 07:18]
Andrei Roșu-Cojocaru [Hierarchy View]
laboratoare:laborator02 [2015/03/04 09:37] (current)
Andrei Roșu-Cojocaru [Activitate de Laborator]
Line 1: Line 1:
-====== Laborator 02. Structura unei Aplicații ​Android ​(I) ======+====== Laborator 02. Structura unei Aplicații (I) ======
  
 O aplicație Android poate conține mai multe componente: O aplicație Android poate conține mai multe componente:
Line 88: Line 88:
 </​file>​ </​file>​
  
-Este obligatoriu ca metoda ''​onCreate()''​ să apeleze metoda părinte, în caz contrar generându-se o excepție. ​Tot aici se realizează și încărcarea interfeței grafice (a cărei structură a fost definită într-un ​fișier .xml din resursele aplicației Android), prin intermediul ​metodei ''​setContentView()''​.+Este obligatoriu ca metoda ''​onCreate()''​ să apeleze metoda părinte, în caz contrar generându-se o excepție. ​ 
 + 
 +Pentru fiecare activitate, este necesar să se descrie interfața grafică în cadrul unui fișier .xml (încărcat manual, în cadrul metodei ''​onCreate()''​, printr-un apel al metodei ''​setContentView()''​) în care elementul părinte este un mecanism de dispunere a conținutului (derivat din clasa ''​android.view.ViewGroup''​). Acest fișier este plasat în directorul ''​res/​layout''​ și conține referințe către toate obiectele care vor fi afișate în cadrul ferestrei. În urma compilării,​ vor fi generate niște referințe (adrese în cadrul pachetului de resurse) prin intermediul cărora resursele vor putea fi accesate. 
 + 
 +<file xml activity_lifecycle_monitor.xml>​ 
 +<​LinearLayout xmlns:​android="​http://​schemas.android.com/​apk/​res/​android"​ 
 +    xmlns:​tools="​http://​schemas.android.com/​tools"​ 
 +    android:​layout_width="​match_parent"​ 
 +    android:​layout_height="​wrap_content"​ 
 +    android:​paddingBottom="​@dimen/​activity_vertical_margin"​ 
 +    android:​paddingLeft="​@dimen/​activity_horizontal_margin"​ 
 +    android:​paddingRight="​@dimen/​activity_horizontal_margin"​ 
 +    android:​paddingTop="​@dimen/​activity_vertical_margin"​ 
 +    android:​orientation="​vertical"​ 
 +    tools:​context="​ro.pub.cs.systems.pdsd.lab02.graphicuserinterface.LifecycleMonitorActivity"​ > 
 +     
 +    <!-- ... --> 
 +     
 +</​LinearLayout>​ 
 +</​file>​ 
 + 
 +Prin urmare, componentele definitorii ale unei activități sunt clasa în care este implementat comportamentul în urma interacțiunii cu utilizatorul și fișierul .xml care descrie modelul static al interfeței grafice. 
 + 
 +{{ :​laboratoare:​laborator02:​activity_relationships.png?​nolink&​700 }}
  
 O activitate poate fi pornită în mod explicit prin intermediul metodei ''​startActivity()''​ care primește ca parametru un obiect de tip intenție (căruia i se pot atașa și niște date, transferate activității). În cazul în care se așteaptă ca activitatea să producă unele rezultate, se va apela metoda ''​startActivityForResult()''​ - furnizându-se și un cod de cerere -, fiind necesar ca activitatea astfel invocată să implementeze metoda ''​onActivityResult()''​. O activitate poate fi pornită în mod explicit prin intermediul metodei ''​startActivity()''​ care primește ca parametru un obiect de tip intenție (căruia i se pot atașa și niște date, transferate activității). În cazul în care se așteaptă ca activitatea să producă unele rezultate, se va apela metoda ''​startActivityForResult()''​ - furnizându-se și un cod de cerere -, fiind necesar ca activitatea astfel invocată să implementeze metoda ''​onActivityResult()''​.
Line 129: 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>​
  
-{{ :​laboratoare:​laborator02:​ciclul_de_viata_al_unei_activitati_2.png?​nolink&​500 }}+{{ :​laboratoare:​laborator02:​ciclul_de_viata_al_unei_activitati_2.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 582: Line 605:
 ==== Depanarea unei aplicații Android ==== ==== Depanarea unei aplicații Android ====
  
 +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.
 +
 +În cadrul mediului integrat de dezvoltare Eclipse Luna SR1a (4.4.1), 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ă
 +  * Debug - pentru monitorizarea pas cu pas a execuției programului,​ cu posibilitatea de consultare a valorilor pe care le au la un moment dat diferite obiecte
 +  * DDMS - pentru furnizarea de informații detaliate la nivel de procese, fire de execuție, sistem de fișiere, memorie ocupată, evenimente specifice dispozitivelor mobile
 +  * Hierarchy View - pentru vizualizarea ierarhiei de componente grafice din cadrul interfeței afișate utilizatorului
 +
 +{{ :​laboratoare:​laborator02:​eclipse_perspectives_for_android.png?​nolink }}
 === 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: ​
Line 667: Line 699:
  
 {{ :​laboratoare:​laborator02:​logcat_message_filter_settings.png?​nolink }} {{ :​laboratoare:​laborator02:​logcat_message_filter_settings.png?​nolink }}
 +
 +Se recomandă să se configureze un număr cât mai mare de mesaje de jurnalizare care să fie stocate în memoria tampon (//Window// → //​Preferences//​ → //Android// → //LogCat//) întrucât după depășirea valorii respective, monitorizarea nu va mai fi posibilă.
 +
 +{{ :​laboratoare:​laborator02:​logcat_configuration.png?​nolink&​700 }}
  
 === DDMS === === DDMS ===
Line 700: Line 736:
  
 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.
 +
 +{{ :​laboratoare:​laborator02:​ddms_file_explorer.png?​nolink&​600 }}
  
 **Simularea unor evenimente de tip întrerupere pentru emulator** **Simularea unor evenimente de tip întrerupere pentru emulator**
Line 742: Line 780:
 Fereastra //Layout View// evidențiază componenta curentă în cadrul interfeței grafice. Fereastra //Layout View// evidențiază componenta curentă în cadrul interfeței grafice.
  
-/* {{ :​laboratoare:​laborator02:​hierarchy_view_layout_view.png?​nolink }} */+{{ :​laboratoare:​laborator02:​hierarchy_view_layout_view.png?​nolink }}
  
 ===== Activitate de Laborator ===== ===== Activitate de Laborator =====
Line 782: Line 820:
     - 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 ține apăsat butonul //Home// o perioadă de timp mai mare
-    - se primește un apel telefonic\\ a) pentru ​dispozitive fizice root-ate / AVD, se poate folosi //DDMS// → //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 //DDMS// → //Emulator Control//\\ b) pentru Genymotion se poate simula doar formarea unui număr de telefon <​code>​
 student@pdsd2015:/​opt/​android-sdk-linux/​platform-tools$ adb devices student@pdsd2015:/​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@pdsd2015:/​opt/​android-sdk-linux/​platform-tools$ adb -s 192.168.56.101:​5555 shell student@pdsd2015:/​opt/​android-sdk-linux/​platform-tools$ adb -s 192.168.56.101:​5555 shell
-student@pdsd2015:/opt/​android-sdk-linux/​platform-tools$ ​am start -a android.intent.action.CALL tel:​1122334455+root@android:/ # am start -a android.intent.action.CALL tel:​1122334455
 </​code>​ </​code>​
       - se acceptă convorbirea       - se acceptă convorbirea
laboratoare/laborator02.1425273507.txt.gz · Last modified: 2015/03/02 07:18 by Andrei Roșu-Cojocaru
CC Attribution-Share Alike 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0