Adicionando mais algumas informações sobre as respostas altamente classificadas (seção adicional adicionada de KILLABLE e próximo conjunto de métodos, que serão chamados no ciclo de vida):
Fonte: developer.android.com
Observe a coluna " Matável " na tabela acima - para os métodos marcados como matáveis, após o retorno desse método, o processo que hospeda a atividade pode ser eliminado pelo sistema a qualquer momento, sem que outra linha de seu código seja executada.
Por esse motivo, você deve usar o onPause()
método para gravar quaisquer dados persistentes (como edições do usuário) no armazenamento. Além disso, o método onSaveInstanceState(Bundle)
é chamado antes de colocar a atividade em um estado de segundo plano, permitindo salvar qualquer estado dinâmico da instância em sua atividade no dado Bundle
, para ser recebido posteriormente onCreate(Bundle)
se a atividade precisar ser recriada.
Observe que é importante salvar dados persistentes em onPause()
vez de, onSaveInstanceState(Bundle)
porque estes não fazem parte dos retornos de chamada do ciclo de vida, portanto, não serão chamados em todas as situações, conforme descrito em sua documentação.
Eu gostaria de adicionar mais alguns métodos. Eles não são listados como métodos de ciclo de vida, mas serão chamados durante o ciclo de vida, dependendo de algumas condições. Dependendo do seu requisito, pode ser necessário implementar esses métodos em seu aplicativo para o manuseio adequado do estado.
onPostCreate(Bundle savedInstanceState)
Chamado quando a inicialização da atividade é concluída (depois onStart()
e onRestoreInstanceState(Bundle)
foi chamada).
onPostResume()
Chamado quando o resumo da atividade estiver concluído (depois de onResume()
ter sido chamado).
onSaveInstanceState(Bundle outState)
Chamado para recuperar o estado por instância de uma atividade antes de ser eliminado, para que o estado possa ser restaurado em onCreate(Bundle)
ou onRestoreInstanceState(Bundle)
(o Bundle preenchido por esse método será passado para ambos).
onRestoreInstanceState(Bundle savedInstanceState)
Esse método é chamado depois onStart()
que a atividade está sendo reinicializada a partir de um estado salvo anteriormente, fornecido aqui em savedInstanceState
.
Meu código de aplicativo usando todos esses métodos:
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText txtUserName;
private EditText txtPassword;
Button loginButton;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d("Ravi","Main OnCreate");
txtUserName=(EditText) findViewById(R.id.username);
txtPassword=(EditText) findViewById(R.id.password);
loginButton = (Button) findViewById(R.id.login);
loginButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Log.d("Ravi", "Login processing initiated");
Intent intent = new Intent(this,LoginActivity.class);
Bundle bundle = new Bundle();
bundle.putString("userName",txtUserName.getText().toString());
bundle.putString("password",txtPassword.getText().toString());
intent.putExtras(bundle);
startActivityForResult(intent,1);
// IntentFilter
}
public void onActivityResult(int requestCode, int resultCode, Intent resIntent){
Log.d("Ravi back result:", "start");
String result = resIntent.getStringExtra("result");
Log.d("Ravi back result:", result);
TextView txtView = (TextView)findViewById(R.id.txtView);
txtView.setText(result);
Intent sendIntent = new Intent();
//sendIntent.setPackage("com.whatsapp");
sendIntent.setAction(Intent.ACTION_SEND);
sendIntent.putExtra(Intent.EXTRA_TEXT, "Message...");
sendIntent.setType("text/plain");
startActivity(sendIntent);
}
@Override
protected void onStart() {
super.onStart();
Log.d("Ravi","Main Start");
}
@Override
protected void onRestart() {
super.onRestart();
Log.d("Ravi","Main ReStart");
}
@Override
protected void onPause() {
super.onPause();
Log.d("Ravi","Main Pause");
}
@Override
protected void onResume() {
super.onResume();
Log.d("Ravi","Main Resume");
}
@Override
protected void onStop() {
super.onStop();
Log.d("Ravi","Main Stop");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("Ravi","Main OnDestroy");
}
@Override
public void onPostCreate(Bundle savedInstanceState, PersistableBundle persistentState) {
super.onPostCreate(savedInstanceState, persistentState);
Log.d("Ravi","Main onPostCreate");
}
@Override
protected void onPostResume() {
super.onPostResume();
Log.d("Ravi","Main PostResume");
}
@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
super.onSaveInstanceState(outState, outPersistentState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
}
}
Atividade de login:
public class LoginActivity extends AppCompatActivity {
private TextView txtView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login);
txtView = (TextView) findViewById(R.id.Result);
Log.d("Ravi","Login OnCreate");
Bundle bundle = getIntent().getExtras();
txtView.setText(bundle.getString("userName")+":"+bundle.getString("password"));
//Intent intent = new Intent(this,MainActivity.class);
Intent intent = new Intent();
intent.putExtra("result","Success");
setResult(1,intent);
// finish();
}
}
saída: (Antes da pausa)
D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
saída: (Após retomar da pausa)
D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
Observe que onPostResume()
é chamado mesmo que não seja citado como método de ciclo de vida.