完成()后,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() 。 你必须考虑这个问题,如果你不想在完成调用后执行任何代码。
希望能帮助到你。