Я хотів би закінчити дію всередині onCreate
методу. Коли я дзвоню finish()
, onDestroy()
не викликається відразу, код продовжує текти минулим finish()
. onDestroy()
викликається лише після onCreate()
закриття фігурної дужки.
Відповідно до onCreate()
опису на сторінці developer.android.com/reference.
Ви можете викликати finish () з цієї функції, і в цьому випадку onDestroy () буде негайно викликаний без виконання будь-якого решти циклу діяльності (onStart (), onResume (), onPause () тощо).
Причина, яку я запитую: я хотів би перевірити дані з набору, переданого onCreate()
. Звичайно, у мене є контроль над тим, що передається onCreate
, але я все ще думаю, що це слід перевірити в пункті доставки.
Мій код містить клас A
, який запускає Activity B
. Я вважаю, що останні два теги "за межами речення if" не слід викликати, оскільки finish
метод у if
заяві повинен був знищити активність. Це не має нічого спільного з реченням if, оскільки рядок тегу після другого finish()
виклику все ще також читається.
Мій код:
Клас А
@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
Мій код ClassB
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
Ось результати моїх тегів:
11-26 15: 53: 40.456: INFO / тег (699): A Клас: goToBButton, onClick
11-26 15: 53: 40.636: INFO / тег (699): A Клас: onPause
11-26 15: 53: 40.865: ІНФО / тег (699): Клас B: один рядок перед 1-м фінішем
11-26 15: 53: 40.896: INFO / тег (699): Клас B: поза реченням if, перед другим фінішем
11-26 15: 53: 40.917: INFO / тег (699): Клас B: поза реченням if, після закінчення
11-26 15: 53: 41.035: INFO / тег (699): A Клас: onResume
11-26 15: 53: 41.165: INFO / тег (699): Клас B: onDestroy