Ajout de plus d'informations en plus de la réponse la mieux notée (Ajout d'une section supplémentaire de KILLABLE et du prochain ensemble de méthodes, qui seront appelées dans le cycle de vie):
Source: developer.android.com
Notez le " Killable colonne " dans le tableau ci-dessus - pour les méthodes qui sont marquées comme pouvant être tuées, après le retour de cette méthode, le processus hébergeant l'activité peut être tué par le système à tout moment sans qu'une autre ligne de son code ne soit exécutée.
Pour cette raison, vous devez utiliser la onPause()
méthode pour écrire toutes les données persistantes (telles que les modifications utilisateur) dans le stockage. De plus, la méthode onSaveInstanceState(Bundle)
est appelée avant de placer l'activité dans un tel état d'arrière-plan, ce qui vous permet d'enregistrer tout état d'instance dynamique dans votre activité dans le donné Bundle
, pour être reçu ultérieurement onCreate(Bundle)
si l'activité doit être recréée.
Notez qu'il est important d'enregistrer les données persistantes au onPause()
lieu de onSaveInstanceState(Bundle)
car ces dernières ne font pas partie des rappels du cycle de vie, elles ne seront donc pas appelées dans toutes les situations comme décrit dans sa documentation.
Je voudrais ajouter quelques méthodes supplémentaires. Celles-ci ne sont pas répertoriées comme méthodes de cycle de vie, mais elles seront appelées pendant le cycle de vie en fonction de certaines conditions. Selon vos besoins, vous devrez peut-être implémenter ces méthodes dans votre application pour une gestion appropriée de l'état.
onPostCreate(Bundle savedInstanceState)
Appelée lorsque l' activité de démarrage est terminée (après onStart()
et onRestoreInstanceState(Bundle)
ont été appelés).
onPostResume()
Appelé lorsque la reprise d'activité est terminée (après onResume()
avoir été appelé).
onSaveInstanceState(Bundle outState)
Appelé pour récupérer l'état par instance d'une activité avant d'être tué afin que l'état puisse être restauré dans onCreate(Bundle)
ou onRestoreInstanceState(Bundle)
(le bundle rempli par cette méthode sera transmis aux deux).
onRestoreInstanceState(Bundle savedInstanceState)
Cette méthode est appelée après onStart()
lorsque l'activité est réinitialisée à partir d'un état précédemment enregistré, indiqué ici dans savedInstanceState
.
Mon code d'application en utilisant toutes ces méthodes:
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);
}
}
Activité de connexion:
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();
}
}
sortie: (avant pause)
D/Ravi: Main OnCreate
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
sortie: (après reprise de la pause)
D/Ravi: Main ReStart
D/Ravi: Main Start
D/Ravi: Main Resume
D/Ravi: Main PostResume
Notez que cela onPostResume()
est invoqué même s'il n'est pas cité comme méthode du cycle de vie.