2012-03-30 2 views
0

J'ai un code simple où je veux savoir quand onRestoreInstanceState est appelé pendant l'exécution du programme dans android?onRestoreInstanceState n'est pas appelé?

S'il vous plaît aidez-moi.

Merci d'avance.

Ma première activité est la suivante

public class AbcActivity extends Activity { 
Button b1; 
EditText ed1; 
Bundle b = new Bundle(); 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    Log.v("Tag", "inside oncreate"); 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    b1 = (Button) findViewById(R.id.button1); 
    ed1 = (EditText) findViewById(R.id.editText1); 

    b1.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), 
        SecondActivity.class); 
      startActivity(intent); 
     } 
    }); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    Log.v("Tag", "inside onsave instance state"); 

    outState.putString("key", ed1.getText().toString()); 
    super.onSaveInstanceState(outState); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    Log.v("Tag", "inside on restore instance state"); 
    super.onRestoreInstanceState(savedInstanceState); 

    if (savedInstanceState != null) { 
     Log.v("tag", "inside if"); 
     String str = savedInstanceState.getString("key"); 
     ed1.setText("" + str); 
    } 

} 

}

mon deuxième code d'activité se présente comme suit

public class SecondActivity extends Activity { 
Button back; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    Log.v("Tag", "inside 2 oncreate"); 
    // TODO Auto-generated method stub 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.second); 

    back = (Button) findViewById(R.id.button1); 

    back.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), 
        AbcActivity.class); 
      startActivity(intent); 
     } 
    }); 
} 

@Override 
protected void onSaveInstanceState(Bundle outState) { 
    Log.v("Tag", "inside 2 onsave instance state"); 
    super.onSaveInstanceState(outState); 
} 

@Override 
protected void onRestoreInstanceState(Bundle savedInstanceState) { 
    Log.v("Tag", "inside 2 on restore instance state"); 
    super.onRestoreInstanceState(savedInstanceState); 
} 

}

Répondre

2

Comme l'indique la documentation:

Cette méthode est appelée après onStart() lorsque l'activité est réinitialisée à partir d'un état ... précédemment enregistré Cette méthode est appelée entre onStart() et onPostCreate(Bundle)

Tel est le cas lorsque votre Activity est re -créé après avoir été tué par le système ou après un changement de configuration, et il a enregistré son état dans onSaveInstanceState(Bundle) - qui est toujours appelé avant qu'un Activity est tué.

+0

ai-je besoin d'appeler les méthodes finish() ou onStop() dans mon code? – Shri

+0

Non, il n'est appelé qu'après une interruption de votre activité, par ex. après destruction en raison d'une condition de mémoire faible. Vous pouvez "émuler" en ouvrant l'activité que vous souhaitez tester, en appuyant sur le bouton Accueil, puis en supprimant le processus, par ex. via DDMS (cela enverra System.exit (1)) – Matthias

+1

faites ce que Matthias a dit ou changez simplement d'orientation. @Matthias ce n'est pas le seul cas, il est également appelé après un changement de configuration. – futtetennista

Questions connexes