1. ホーム
  2. android

[解決済み] アンドロイド アクティビティスタックを消去する

2022-05-14 09:04:29

質問

アプリケーションにいくつかのアクティビティがあり、フローが非常に複雑です。ログアウトをクリックすると、ログイン画面に遷移し、そこからキャンセルボタンで終了することができます(呼び出しは 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);

どのように解決するのですか?

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

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() に渡されるIntentに設定された場合、このフラグにより、アクティビティに関連する既存のタスクは がクリアされ、アクティビティが開始されます。 アクティビティが開始される前にクリアされる。つまり、アクティビティは空のタスクの新しいルートになり、古いアクティビティは終了する。 の新しいルートとなり、古いアクティビティは終了します。これは と組み合わせてのみ使用できる。 FLAG_ACTIVITY_NEW_TASK .