6

ユーザーがアプリケーション内で「ログアウト」をタップすると、「ログイン」アクティビティに移動し、アプリケーション内で実行中または一時停止中の他のすべてのアクティビティを強制終了したいと考えています。

ユーザーが以前にログインしたことがある場合、私のアプリケーションは共有設定を使用して、起動時に「ログイン」アクティビティをバイパスします。したがって、この場合、FLAG_ACTIVITY_CLEAR_TOP は機能しません。これは、ユーザーが移動したときにログイン アクティビティがアクティビティ スタックの一番上にあるためです。

4

3 に答える 3

12

BroadcastReceiver を使用して、他のアクティビティで「キル信号」をリッスンできます

http://developer.android.com/reference/android/content/BroadcastReceiver.html

アクティビティで、BroadcastReceiver を登録します

IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("CLOSE_ALL");
BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
  @Override
  public void onReceive(Context context, Intent intent) {
    // close activity
  }
};
registerReceiver(broadcastReceiver, intentFilter);

次に、アプリのどこからでもブロードキャストを送信するだけです

Intent intent = new Intent("CLOSE_ALL");
this.sendBroadcast(intent);
于 2012-09-04T15:22:52.043 に答える
8

API 11+ の場合Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK、次のように使用できます。

Intent intent = new Intent(this, MyActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK);
this.startActivity(intent);

以前のすべてのアクティビティを完全にクリアし、新しいアクティビティを開始します。

于 2015-02-24T19:05:49.757 に答える
2

FLAG_ACTIVITY_CLEAR_TOP使用する代わりにFLAG_ACTIVITY_CLEAR_TASK(API 11 以降):

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

于 2012-09-04T17:48:35.163 に答える