поток onCreate продолжается после завершения()
я хотел бы закончить деятельность внутри onCreate
метод. Когда я звоню finish()
,onDestroy()
не сразу вызывается, код продолжает течь мимо finish()
. onDestroy()
не вызывается до тех пор, пока после onCreate()
закрывающая скобка.
на onCreate()
описание на developer.android.com/reference.
вы можете вызвать finish() из этой функции, в этом случае onDestroy () будет немедленно вызван без каких-либо остальных жизненный цикл активности (onStart (), onResume (), onPause () и т. д.) выполняется.
причина, по которой я спрашиваю: я хотел бы проверить данные из пакета, переданного onCreate()
. Конечно, у меня есть контроль над тем, что передается onCreate
, но я все еще думаю, что это должно быть проверено в точке доставки.
мой код содержит класс A
, который приступает к работе 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 / tag (699): A Класс: goToBButton, onClick
11-26 15:53:40.636: INFO / tag(699): A Класс: onPause
11-26 15:53:40.865: INFO / tag (699): B класс: одна строка до 1-го финиша
11-26 15:53:40.896: INFO / tag(699): B класс: вне предложения if, перед вторым финишем
11-26 15:53:40.917: INFO / tag(699): B класс: вне предложения if, после финиша
11-26 15:53:41.035: INFO / tag(699): A Class: onResume
11-26 15:53:41.165: INFO / tag (699): B класс: onDestroy
2 ответа:
Я предполагаю, что это потому, что finish() не вызывает возврата метода onCreate. Вы можете попробовать просто добавить
finish(); return;
или использовать if else
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layoutb); if(good data){ //do stuff }else{ finish(); } }
Кажется
finish()
не работает, покаonCreate()
вернуть управление системе. Пожалуйста, обратитесь к этому сообщению: о finish () в android. Вы должны рассмотреть эту проблему, если вы не хотите, чтобы какой-либо из вашего кода был выполнен после вызова finish.надеюсь, что это помогает.