onCreate
メソッド内からアクティビティを終了したいと思います。を呼び出すとfinish()
、onDestroy()
がすぐに呼び出されず、コードが を通過し続けますfinish()
。閉じ中括弧onDestroy()
の後まで呼び出されません。onCreate()
onCreate()
developer.android.com/referenceの説明に従ってください。
この関数内から finish() を呼び出すことができます。この場合、残りのアクティビティ ライフサイクル (onStart()、onResume()、onPause() など) が実行されることなく、onDestroy() がすぐに呼び出されます。
質問する理由: に渡されたバンドルのデータを確認したいonCreate()
。もちろん、 に何を渡すかは私が管理していonCreate
ますが、それでも配達時にチェックする必要があると思います。
A
私のコードには、 Activity を開始するclass が含まれていますB
。ステートメントfinish
内のメソッドがアクティビティを破棄する必要があるため、最後の 2 つの「if 句の外側」タグを呼び出すべきではないと思います。2 番目の呼び出しの後のタグ行も読み取られる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: INFO/tag(699): クラス: goToBButton、onClick
11-26 15:53:40.636: 情報/タグ (699): クラス: onPause
11-26 15:53:40.865: INFO/tag(699): B クラス: 1st フィニッシュの 1 行前
11-26 15:53:40.896: INFO/tag(699): B クラス: if 句の外、2 番目の終了前
11-26 15:53:40.917: INFO/tag(699): B クラス: if 句の外、終了後
11-26 15:53:41.035: 情報/タグ (699): クラス: onResume
11-26 15:53:41.165: 情報/タグ (699): B クラス: onDestroy