Es mostren els missatges amb l'etiqueta de comentaris Activity. Mostrar tots els missatges
Es mostren els missatges amb l'etiqueta de comentaris Activity. Mostrar tots els missatges

dijous, 25 de juliol del 2013

Us d'intents per iniciar activitats



De Intents en tenim de dos tipus: explícits i implícits.

  • Cridar mètodes implícits sense retorn de resultat
 Cal declarar l'activitat al fitxer AndroidManifest.xml

        <activity
            android:name="com.lina.validar.ActivitatSegona"
            android:label="@string/title_activity_activitat_segona" >
        </activity>

Per obrir una nova activitat, que no retorna resultats a la primera (codi en la primera activitat)

Intent intencio= new Intent(getApplicationContext(), ActivitatSegona.class);

Per passar arguments entre activitats (codi en la primera activitat)

intencio.putExtra("NOM", nom);
startActivity(intencio);

Per recollir els arguments en la segona activitat, passats per la primera

String nom = getIntent().getStringExtra("NOM");
 
  • Cridar mètodes implícits amb retorn de resultat
Es declaren igual però es cridem amb

startActivityForResult(intencio, codi);

On codi pot ser qualsevol número superior a 0 i que serveix per identificar el intent.

Després l'activitat segona li retorna la informació a l'activitat primera amb

Intent intent = new Intent();
intent.putExtra( "tornar" , 1);
setResult( RESULT_OK ,intent);
finish();

I l'activitat primera per recollir el resultat:

@Override
protected void onActivityResult ( int requestCode, int resultCode, Intent data){
super .onActivityResult(requestCode, resultCode, data);
if (requestCode == 10 && resultCode == RESULT_OK ){
int valorObtenido = data.getIntExtra("devolver", 0);
//el nostre codi
       }
}

  • Cridar mètodes explícits
Per exemple:

startActivity(new Intent(Intent.ACTION_CALL, Uri.parse("tel:933333333")));

La classe Intent defineix una sèrie d'accions predeterminades ( es poden consultar http://developer.android.com/guide/components/intents-filters.html). En aquest cas cridem a l'acció ACTION_CALL que inicia una trucada de telèfon

Guardar l'estat d'una Activity



Quan una activitat està pausada o aturada, l'usuari no és conscient que l'activitat pot ser destruida en qualsevol moment i quan retorna a l'activitat espera que aquesta estigui al mateix estat que l'ha deixada. Si la informació és molt delicada es recomana usar el mètode onPause() i onResume(), ja que els mètodes onStop() i onDestroy() no és segur que es cridin. Però també tenim dos mètodes més senzills que són el  mètode onSaveInstanceState()  i podem guardar valor mitjançant el putString() i putInt(). Per recuperar l'estat cal usar onRestoreInstanceState(). En aquest gràfic es pot veure el cicle de vida i quan es crida a aquest mètodes:


Les avantatges d'aquests mètodes és que no cal que el programador busqui mètodes d'emmagatzematge sofisticats, però no hi ha la garantia que es cridin.

Cicle de vida d'una Activity



Les Activities es gestionen com una pila en el sistema, com ja vam comentar abans, és a dir, quan una  Activity s'inicia, aquesta es posiciona al principi de la pila, i passarà a ser la Activity que veiem en aquest moment.
Una Activity té essencialment tres estats:
  • Si la Activity està en primer pla (si l'estem veient actualment), es diu que està activa o  executant.  ( estat Resumed)
  • Si la Activity ha perdut el focus, però segueix sent visible (per exemple, quan s'inicia una altra Activity que no ocupa la pantalla sencera), es diu que està pausada. Una Activity pausada segueix romanent en memòria però pot ser "matada" pel sistema en condicions de baixa memòria.  (estat Paused )
  • Si la Activity deixa de ser visible (per exemple, quan s'inicia una altra Activity que ocupi la pantalla sencera), es diu que està parada. Tot i així segueix romanent en memòria, encara que pot ser "Matada" pel sistema en condicions de poca memòria. (estat Stopped)
 En aquest esquema es pot veure el cicle de vida d'una activitat (Font : http://developer.android.com/guide/components/activities.html )