我想从onCreate
方法内部完成一项活动。当我调用时finish()
,onDestroy()
不会立即调用,代码一直流过去finish()
。onDestroy()
直到在onCreate()
右大括号之后才被调用。
根据onCreate()
developer.android.com/reference 上的描述。
您可以在此函数中调用 finish(),在这种情况下,将立即调用 onDestroy(),而不会执行任何其他活动生命周期(onStart()、onResume()、onPause() 等)。
我问的原因是:我想检查 Bundle 中传递给onCreate()
. 当然,我可以控制传递给 的内容onCreate
,但我仍然认为应该在交付时对其进行检查。
我的代码包含A
启动 Activity的类B
。我相信最后两个“if 子句之外”标签不应该被调用,因为语句finish
中的方法if
应该已经破坏了活动。它与 if 子句无关,因为finish()
仍然会读取第二次调用之后的标记行。
我的代码:
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
我的代码 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:信息/标签(699):A 类:goToBButton,onClick
11-26 15:53:40.636:信息/标签(699):A 类:onPause
11-26 15:53:40.865:INFO/tag(699):B 类:第一次完成前的一行
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:信息/标签(699):A 类:onResume
11-26 15:53:41.165:信息/标签(699):B 类:onDestroy