onCreateフローはfinish()の後も継続する。
質問
の中からアクティビティを終了させたい。
onCreate
メソッドの内部でアクティビティを終了させたいと思います。私が
finish()
,
onDestroy()
がすぐに呼び出されないと、コードは常に
finish()
.
onDestroy()
が呼び出されるのは
onCreate()
を閉じた後でないと呼び出されません。
にあたり
onCreate()
の記述は、developer.android.com/referenceにあります。
この関数内から finish() を呼び出すことができ、その場合 onDestroy()が直ちに呼び出されます。 アクティビティのライフサイクル(onStart(), onResume(), onPause(), etc.)を実行することなく、onDestroy()が即座に呼び出されます。
私が尋ねる理由は、次のとおりです。に渡されたBundleからデータをチェックしたいのです。
onCreate()
. もちろん、私は何が
onCreate
に渡されるものをコントロールすることはできますが、やはり配信の時点でチェックされるべきだと思います。
私のコードには、クラス
A
というクラスがあり、これが Activity を開始します。
B
. 私は、最後の2つの "if節の外側"タグが、呼び出されるべきではないと考えています。
finish
メソッドで
if
ステートメントがアクティビティを破壊しているはずです。 これはif節とは関係なく、2番目の
finish()
の呼び出しの後のタグラインもまだ読み込まれているので、if節とは関係ありません。
私のコードです。
クラス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): 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回目の終了の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: INFO/tag(699): A クラス: onResume
11-26 15:53:41.165: INFO/tag(699): Bクラス: onDestroy
どのように解決するのですか?
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();
}
}
関連
-
[解決済み] SDカードからファイルを削除する方法を教えてください。
-
[解決済み] RecyclerView.Stateを使って、RecyclerViewのスクロール位置を保存するには?
-
[解決済み] AndroidでラジオボタンにOnClickListenerを設定するには?
-
[解決済み] アンドロイドアプリのユーザーデータを消去する
-
[解決済み] wrap_contentでRelativeLayoutがフルスクリーンになってしまう
-
[解決済み] EclipseのAndroidプロジェクトにライブラリ/JARを追加する
-
[解決済み] XMLで矩形を描画できますか?
-
[解決済み] Travis.yml ./gradlew : パーミッションが拒否されました。
-
[解決済み] 実行に失敗しました app:processDebugResources Android Studio
-
[解決済み] アクティビティで作成した放送受信機の登録・解除はいつ行うのか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] アプリ内課金テスト:android.test.purchased already owned
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] 複数のフィルタを持つBroadcastReceiverか、複数のBroadcastReceiverか?
-
[解決済み] Android端末がHDPI画面かMDPI画面かを確認する方法は?
-
[解決済み] APKが署名済みかデバッグビルドかを確認するには?
-
[解決済み] FragmentPagerAdapterのgetItemが呼び出されない
-
[解決済み] edittextのテキストがメールアドレスかどうかを確認するには?
-
[解決済み] アダプタからActivityメソッドを呼び出す
-
[解決済み] FABアイコンの色を設定する
-
[解決済み] AndroidのActivity.finish()はどのように動作するのですか?