Agregar más información sobre la respuesta altamente calificada (Se agregó una sección adicional de KILLABLE y el siguiente conjunto de métodos, que se llamarán en el ciclo de vida):
Fuente: developer.android.com
Tenga en cuenta el " Killable columna " en la tabla anterior: para aquellos métodos que están marcados como eliminables, después de que ese método devuelve, el sistema puede el proceso que aloja la actividad en cualquier momento sin que se ejecute otra línea de su código.
Debido a esto, debe usar el onPause()
método para escribir cualquier dato persistente (como las ediciones del usuario) en el almacenamiento. Además, onSaveInstanceState(Bundle)
se llama al método antes de colocar la actividad en dicho estado de fondo, lo que le permite guardar cualquier estado de instancia dinámica en su actividad en el dado Bundle
, para luego ser recibido onCreate(Bundle)
si la actividad necesita ser recreada.
Tenga en cuenta que es importante guardar datos persistentes en onPause()
lugar de onSaveInstanceState(Bundle)
porque este último no es parte de las devoluciones de llamada del ciclo de vida, por lo que no se llamará en todas las situaciones como se describe en su documentación.
Me gustaría agregar algunos métodos más. Estos no se enumeran como métodos de ciclo de vida, pero se llamarán durante el ciclo de vida dependiendo de algunas condiciones. Dependiendo de sus requisitos, es posible que deba implementar estos métodos en su aplicación para un manejo adecuado del estado.
onPostCreate(Bundle savedInstanceState)
Se llama cuando se completa el inicio de la actividad (después onStart()
y onRestoreInstanceState(Bundle)
se ha llamado).
onPostResume()
Se llama cuando se completa la reanudación de la actividad (después de que onResume()
se ha llamado).
onSaveInstanceState(Bundle outState)
Llamado para recuperar el estado por instancia de una actividad antes de ser eliminado para que el estado pueda restaurarse en onCreate(Bundle)
o onRestoreInstanceState(Bundle)
(el paquete poblado por este método se pasará a ambos).
onRestoreInstanceState(Bundle savedInstanceState)
Este método se llama después onStart()
cuando la actividad se reinicia desde un estado previamente guardado, dado aquí en savedInstanceState
.
Mi código de aplicación usando todos estos 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);
}
}
Actividad de inicio de sesión:
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();
}
}
salida: (antes de la pausa)
D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
salida: (después de reanudar desde pausa)
D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
Tenga en cuenta que onPostResume()
se invoca aunque no se cita como método del ciclo de vida.