2012-03-30 2 views
0

У меня есть простой код, где я хочу знать, когда onRestoreInstanceState вызывается во время выполнения программы в android?onRestoreInstanceState не называется?

Пожалуйста, помогите мне.

Заранее спасибо.

Моя первая активность следующим образом

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

} 

}

мой второй код деятельности выглядит следующим образом

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

}

ответ

2

В качестве документации состояний:

Этот метод вызывается после того, как onStart(), когда активность повторного инициализируется из ранее сохраненного состояния ... Этот метод вызывается между onStart() и onPostCreate(Bundle)

Это тот случай, когда ваш Activity повторно - созданный после того, как он был убит системой или после изменения конфигурации, и сохранил свое состояние в onSaveInstanceState(Bundle) - которое всегда вызывается до того, как будет убит Activity.

+0

Так что мне нужно вызвать методы finish() или onStop() в моем коде? – Shri

+0

Нет, это вызвано только после нарушения вашей активности, например. после разрушения из-за низкого состояния памяти. Вы можете «эмулировать» это, открыв операцию, которую вы хотите протестировать, нажав кнопку «Домой», а затем убивая процесс, например. через DDMS (это отправит System.exit (1)) – Matthias

+1

сделайте то, что сказал Маттиас или просто изменил ориентацию. @ Matthias - это не единственный случай, который вызывается после изменения конфигурации. – futtetennista

Смежные вопросы