完成()后,onCreatestream程继续

我想从onCreate方法中完成一个活动。 当我调用finish()onDestroy()没有立即调用,代码不断stream过finish()onDestroy()直到onCreate()右大括号后才被调用。

根据developer.android.com/reference上的onCreate()描述。

你可以在这个函数中调用finish(),在这种情况下,onDestroy()将被立即调用,而没有任何其他的活动生命周期(onStart(),onResume(),onPause()等)执行。

我想问的原因是:我想检查传递给onCreate()的Bundle中的数据。 当然,我可以控制传递给onCreate ,但我仍然认为应该在交付时检查。

我的代码包含类A ,它启动活动B 我相信最后两个“if子句之外”的标签,不应该被调用,因为if语句中的finish方法应该已经销毁了这个activity。 它与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):类:goToBButton,onClick

11-26 15:53:40.636:INFO / tag(699):一个类:onPause

11-26 15:53:40.865:信息/标记(699):B类:第一个完成之前的一行

11-26 15:53:40.896:INFO /标签(699):B类:在if子句之外,在第二个结束之前

11-26 15:53:40.917:INFO / tag(699):B类:在if语句之外,完成之后

11-26 15:53:41.035:INFO / tag(699):一个类:onResume

11-26 15:53:41.165:INFO / tag(699):B Class:onDestroy

我猜这是因为finish()不会导致onCreate方法返回。 你可以尝试简单地添加

 finish(); return; 

或者使用一个其他的

 @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layoutb); if(good data){ //do stuff }else{ finish(); } } 

看起来像finish()不工作,直到onCreate()返回控制系统。 请参考这篇文章: 关于android中的finish() 。 你必须考虑这个问题,如果你不想在完成调用后执行任何代码。

希望能帮助到你。