Documente Academic
Documente Profesional
Documente Cultură
ACTIVITĂȚI
Evenimentul este apelat in momentul in care se creaza activitate. Aici vom initializa
compentele ferestrei. Pentru a face elementele de pe fereastra vizibile, este necesar sa apelam
functia setContentView. Exista cazuri in care la pornirea eplicatiei, aceasta trebuie sa revina la o
stare anterioara (ex: dupa o oprire fortata). Astfel, este recomandat ca in acest aveniment sa se
verifice daca fereastra este una noua sau nu, adica daca variabila de tip Bundle pasata ca
parametru este nula sau nu.
if (savedInstanceState!=null)
{
//fereastra nu e noua si trebuie incarcate anumite date ramase
}
else
{
//fereastra e noua
}
ONPAUSE
Cand acest eveniment este apelat, fereastra se pregateste pentru oprire. De aceea este
important sa salvam toate schimbarile de care avem nevoie. Aici vom opri procesele care nu mai
sunt necesare cand aplicatia nu ruleaza, cum ar fi elementele video sau audio.
Unele dintre metodele care gestionează ciclul de viață al unei activități primesc ca parametru
un obiect de tip Bundle (https://developer.android.com/reference/android/os/Bundle.html),
utilizat pentru gestiunea stării în cazul în care activitatea este distrusă din lipsă de memorie:
onCreate() - parametrul savedInstance poate să fie null, daca activitatea nu a mai fost
rulată anterior, fie este o instanță a unui obiect de tip Bundle în care se găsește starea
anterioară (așa cum a fost reținută de metoda onSaveInstanceState());
onSaveInstanceState() - este apelată când activitatea urmează să fie ascunsă și există
posibilitatea ca procesul acesteia să fie terminat din lipsă de memorie, pentru a salva
starea activității;
onRestoreInstanceState() - este apelată doar dacă există o stare a activității care ar
trebui să fie restaurată.
Obiectul de tip Bundle este o formă de hash map, în care cheia este întotdeauna de tip String,
iar valorile au tipul android.os.Parcelable (asemănător cu Serializable din Java, deși acesta nu
este un mecanism de serializare în sine).
Starea unei activități este menținută atâta vreme cât ea este activă (deci inclusiv când au fost
apelate metodele onPause() și onStop()), aceasta putând fi restaurată corespunzător.
Necesitatea asigurării consistenței activității de către programator apare în momentul în care
activitatea este terminată/distrusă și apoi (re)pornită. O astfel de situație este frecventă în cazul
în care se produce o schimbare de configurație (se modifică orientarea dispozitivului de afișare -
portrait vs. landscape, limba, disponibilitatea tastaturii), întrucât de fiecare dată este necesar să
se (re)încarce resursele specifice pentru valorile respective.
SALVAREA STĂRII
În cazul în care se dorește salvarea explicită a conținutului unui obiect EditText, se poate
proceda astfel:
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
EditText myEditText = (EditText)findViewById(R.id.my_edit_text);
savedInstanceState.putString("myEditText", myEditText.getText());
}
Valoarea introdusă de utilizator va fi salvată în obiectul de tip Bundle sub denumirea
userNameEditText, acesta fiind menținut și prin urmare utilizat între mai multe instanțe ale
acestei activități.
În cadrul acestuia, prin cheia android:views se reține un obiect de tip SparseArray (un
tip de dată specific Android care realizează mapări între întregi și obiecte, mai eficient decât un
hashmap) care conține starea fiecărui obiect de tip View prin intermediul identificatorului său.
Prin urmare, dacă aplicația este oprită și apoi pornită din nou, obiectele de tip View vor
avea conținutul existent în prealabil. Pentru a dezactiva această opțiune, trebuie specificată în
fișierul .xml care descrie interfața grafică a activității, în elementul corespunzător obiectului de
tip View proprietatea android:saveEnabled=“false”.
Încărcarea conținutului din obiectul de tip Bundle (în vederea restaurării stării) poate fi
realizată:
1. în metoda onCreate()
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lifecycle_monitor);
EditText usernameEditText = (EditText)findViewById(R.id.my_edit_text);
if ((savedInstanceState != null) && (savedInstanceState.getString("myEditText") != null)) {
usernameEditText.setText(savedInstanceState.getString("myEditText"));}}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
EditText usernameEditText= (EditText)findViewById(R.id.my_edit_text);
if (savedInstanceState.getString("myEditText") != null) {
usernameEditText.setText(savedInstanceState.getString(Constants.MY_EDIT_TEXT));
}}
De cele mai multe ori, la trecerea intre activitati vom vrea sa si pasam informatie. Desi
metodele sunt numeroase, pentru moment va vom arata pasarea de variabile prin Intentii
(https://developer.android.com/reference/android/content/Intent.html)
In activitatea din care se initiaza transferul trebuie definit un intent. In cadrul acestuia
putem adauga variabila dorita prin metoda putExtra. Aceasta poate aproape toate tipurile de
baza, dar si obiecte custom, atata timp cat acestea extind Parcelable sau Serializable.
@Override
public boolean onCreateOptionsMenu(Menu menu) { ... }
@Override
public boolean onOptionsItemSelected(MenuItem item) { ... }
DEPANARE
De asemenea, fiind vorba de dispozitive mobile, apar si anumite evenimente specifice, cum
ar fi apeluri telefonice, descarcarea bateriei etc., evenimente ce trebuie tratate intr-un fel sau
altul.
EXERCITII