2012-03-30 30 views
0

Ich habe einen einfachen Code, wo ich wissen möchte, wann onRestoreInstanceState während der Programmausführung in Android aufgerufen wird?onRestoreInstanceState wird nicht aufgerufen?

Bitte helfen Sie mir.

Vielen Dank im Voraus.

Meine erste Aktivität ist wie folgt

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); 
    } 

} 

}

mein zweiter Aktivitätscode wird als

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); 
} 

}

Antwort

2

Da die Dokumentation Staaten folgt:

Diese Methode nach onStart() aufgerufen wird, wenn die Aktivität von einem zuvor gespeicherten Zustand ... neu initialisiert wird Diese Methode zwischen onStart() und onPostCreate(Bundle)

Dies ist der Fall aufgerufen wird, wenn Ihre Activity re - erstellt, nachdem es vom System oder nach einer Konfigurationsänderung getötet wurde, und es speicherte seinen Zustand in onSaveInstanceState(Bundle) - die immer aufgerufen wird, bevor eine Activity getötet wird.

+0

also muss ich finish() oder onStop() Methoden in meinem Code aufrufen? – Shri

+0

Nein, es wird nur nach einer Unterbrechung Ihrer Aktivität, z. nach Zerstörung aufgrund eines geringen Speicherzustandes. Sie können "emulieren", indem Sie die Aktivität, die Sie testen möchten, öffnen, indem Sie die Home-Taste drücken und dann den Vorgang z. über DDMS (das wird System.exit (1) senden) – Matthias

+1

tue was Matthias gesagt hat oder ändere einfach die Orientierung. @Matthias, das ist nicht der einzige Fall, es wird auch nach einer Änderung der Konfiguration aufgerufen. – futtetennista

Verwandte Themen