Android: アクティビティスタックをクリアする 質問する

Android: アクティビティスタックをクリアする 質問する

アプリケーションにはいくつかのアクティビティがあり、フローは非常に複雑です。ログアウトをクリックすると、アプリケーションはログイン画面に移動し、そこからユーザーはキャンセルボタン(呼び出しsystem.exit(0))で終了できます。

終了または戻るボタンを押すと、システムはスタックからアクティビティを呼び出します :( ログイン画面に到達したときにスタック内のすべてのアクティビティをクリアするにはどうすればよいですか?finish()アクティビティが非常に多く、ネイティブカメラ呼び出しアクティビティなど、一部のアクティビティはアクティブなときに閉じてはいけないため、呼び出しは実用的ではありません。

validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);

ベストアンサー1

皆さんのほとんどは間違っています。既存のアクティビティ スタックを、そこに何が入っているかに関係なく閉じて新しいルートを作成する場合、正しいフラグ セットは次のとおりです。

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

ドキュメントより:

public static final int FLAG_ACTIVITY_CLEAR_TASK
API レベル 11 で追加されました

に渡される Intent でContext.startActivity()このフラグを設定すると、アクティビティが開始される前に、アクティビティに関連付けられる既存のタスクがすべてクリアされます。つまり、アクティビティは、それ以外の場合は空のタスクの新しいルートになり、古いアクティビティはすべて終了します。これは と組み合わせてのみ使用できますFLAG_ACTIVITY_NEW_TASK

おすすめ記事