J'aimerais terminer une activité à partir de l'intérieur de l'espace de travail. onCreate
méthode. Lorsque j'appelle finish()
, onDestroy()
n'est pas immédiatement appelé, le code continue à passer devant finish()
. onDestroy()
n'est pas appelé avant que le onCreate()
l'accolade de fermeture.
Par le onCreate()
description à l'adresse developer.Android.com/reference.
Vous pouvez appeler finish() à partir de cette fonction, auquel cas onDestroy() sera immédiatement appelé sans le reste du cycle de vie de l'activité cycle de vie de l'activité (onStart(), onResume(), onPause(), etc.).
La raison de ma question est la suivante : Je voudrais vérifier les données du Bundle transmis à onCreate()
. Bien sûr, j'ai le contrôle de ce qui est transmis à onCreate
mais je continue à penser qu'il devrait être contrôlé au moment de la livraison.
Mon code contient la classe A
qui commence par l'activité B
. Je pense que les deux dernières balises "en dehors de la clause if" ne devraient pas être appelées parce que la balise finish
dans la méthode if
La déclaration aurait dû détruire l'activité. Cela n'a rien à voir avec la clause if, car la ligne de balise après la deuxième instruction finish()
L'appel est toujours aussi lu.
Mon code :
Classe A
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
// goToBButton: when pressed sends message to class B.
Button goToBButton = (Button)this.findViewById(R.id.go_to__b_btn);
goToBButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick (View v) {
Log.i(TAG,"A Class: goToBButton, onClick");
Intent i = new Intent(A.this, B.class);
startActivityForResult(i,REQ_TO_B);
}
});
} // end onCreate
Mon code ClasseB
public class B extends Activity{
private static final String TAG = "tag";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layoutb);
// set as true, should always print Tag: one line before first finish"
if (true) {
Log.i(TAG,"B Class: one line before 1st finish");
finish();
}
// shouldn't get here after first finish
Log.i(TAG,"B Class: outside of if clause, before second finish");
finish();
// shouldn't get here after second finish
Log.i(TAG,"B Class: outside of if clause, after finish");
} // end onCreate
@Override
public void onStart () {
super.onStart();
Log.i(TAG,"B Class: onStart");
}
@Override
public void onRestart() {
super.onRestart();
Log.i(TAG,"B Class: onRestart");
}
@Override
public void onResume () {
super.onResume();
Log.i(TAG,"B Class: onResume");
}
@Override
public void onPause () {
super.onPause();
Log.i(TAG,"B Class: onPause");
}
@Override
public void onStop () {
super.onStop();
Log.i(TAG,"B Class: onStop");
}
@Override
public void onDestroy () {
super.onDestroy();
Log.i(TAG,"B Class: onDestroy");
}
} // end B Class
Voici les résultats de mes tags :
11-26 15:53:40.456 : INFO/tag(699) : Classe A : goToBButton, onClick
11-26 15:53:40.636 : INFO/tag(699) : Une classe : onPause
11-26 15:53:40.865 : INFO/tag(699) : Classe B : une ligne avant la 1ère arrivée
11-26 15:53:40.896 : INFO/tag(699) : Classe B : en dehors de la clause if, avant la deuxième arrivée
11-26 15:53:40.917 : INFO/tag(699) : Classe B : en dehors de la clause if, après la fin
11-26 15:53:41.035 : INFO/tag(699) : Une classe : onResume
11-26 15:53:41.165 : INFO/tag(699) : Classe B : onDestroy