Activity Lifecycle

O schimbare majora adusa sistemului de baza Linux de catre Android a fost un nou ciclu de viata al proceselor. Pentru a economisii energie, procesele nu ruleaza decat atunci cand sunt folosite de catre utilizator. Regasim acest lucru in lifecycle-ul activitatilor.

Din momentul în care activitatea este creată și până la momentul în care este distrusă, ea trece printr-o serie de etape, cunoscute sub denumirea de ciclul de viață al activității:

  • în execuție (eng. running) - activitatea se află în prim plan și este vizibilă, astfel încât utilizatorul poate interacționa cu aceasta prin intermediul interfeței grafice pe care o oferă;
  • întreruptă temporar (eng. paused) - activitatea se află în fundal și este (parțial) vizibilă; o astfel de situație este întâlnită în momentul în care o altă activitate a fost pornită, însă interfața sa grafică este transparentă sau nu ocupă întreaga suprafață a dispozitivului de afișare; în acest caz, activitatea este încă activă în sensul că obiectul de tip Activity este stocat în memorie, fiind atașată în continuare procesului responsabil cu gestiunea ferestrelor și menținându-se starea tuturor componentelor sale; totuși, ea poate fi distrusă de sistemul de operare dacă necesarul de memorie disponibilă nu poate fi întrunit din cauza sa;
  • oprită (eng. stopped) - activitatea se află în fundal și este complet ascunsă; o astfel de situație este întâlnită în momentul în care o altă activitate a fost pornită, iar interfața sa grafică ocupă întreaga suprafață a dispozitivului de afișare; și în acest caz, activitatea este activă în sensul că obiectul de tip Activity fiind stocat în memorie, menținându-se starea tuturor componentelor sale, dar detașându-se de procesul responsabil cu gestiunea ferestrelor; ea poate fi distrusă de sistemul de operare dacă necesarul de memorie disponibilă nu poate fi întrunit din cauza sa;
  • inexistentă - activitatea a fost terminată sau distrusă de sistemul de operare, rularea sa impunând crearea tuturor componentelor sale ca și când ar fi accesată inițial.

Tranziția unei activități dintr-o stare în alta este notificată prin intermediul unor callbacks, care pot fi suprascrise pentru a realiza diferite operații necesare pentru gestiunea memoriei, asigurarea persistenței informațiilor și a consistenței aplicației Android în situația producerii de diferite evenimente:


public class LifecycleMonitorActivity extends Activity {

  /* Apelată în momentul în care activitatea este
     creată; această metodă va fi folosită pentru
     inițializări statice: */
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    * ...
  }
  /* apelată înainte ca activitatea să apară pe ecran; */
  @Override
  protected void onStart() {
    super.onStart();
    * ...
  }

  /* apelată înainte ca activitatea să interacționeze cu
    utilizatorul; această metodă va fi folosită pentru a     
    porni servicii sau cod care trebuie să ruleze atâta timp 
    cât aplicația este afișată pe ecran; este urmată 
    întotdeauna de metoda `onPause()`; */
  @Override
  protected void onResume() {
    super.onResume();
    * ...
  }
  
  /* apelată înainte ca activitatea să fie întreruptă
    temporar, iar o altă activitate să fie reluată; această 
    metodă va fi utilizată pentru a opri servicii sau cod 
    care nu trebuie să ruleze atâta timp cât activitatea se 
    află în fundal (întrucât consumă timp de procesor) și 
    pentru a salva starea diferitelor componente în
    vederea asigurării persistenței și a consistenței 
    aplicației înainte
    și după evenimentul care a produs suspendarea sa */
  @Override
  protected void onPause() {
    super.onPause();
    * ...
  }
   
  /*  apelată în momentul în care activitatea este ascunsă,
    fie din cauză că urmează să fie distrusă, fie din cauză 
    că o altă activitate, a cărei interfață grafică ocupă 
    întreaga suprafață a dispozitivului de afișare, urmează 
    să devină vizibilă;
  */
  @Override
  protected void onStop() {
    super.onStop();
    * ...
  }

  /* apelată înainte ca activitatea să se termine sau să
    fie distrusă de către sistemul de operare (fie manual, 
    fie automat) din lipsă de memorie; această metodă va fi 
    utilizată pentru a elibera resursele ocupate.
  */ 
  @Override
  protected void onDestroy() {
    super.onDestroy();
    * ...
  }
 
  /* apelată atunci când activitatea a fost oprită și
     ulterior repornită; este urmată întotdeauna de metoda
     `onStart()`; */
  @Override
  protected void onRestart() {
    super.onRestart();
    * ...
  }
  
}


public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        ...
}        

public override fun onRestart() {
        super.onRestart()
        ...
}