FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

3561 ワード

FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET:taskリセット時にactivityをクリア
このフラグは、例えば、e-mailのアプリケーションが添付ファイルを表示するコマンドに使用される場合があります.このコマンドは、ユーザーがこのことを完了する一部であるため、画像ブラウズのactivityを起動して添付ファイルを表示するコマンドを起動します.このactivityはe-mailアプリケーションの一部です.しかし、ユーザーがこのe-mailアプリケーションを離れ、しばらくしてからユーザーがホームからこのアプリケーションを選択すると、添付ファイルの画像インタフェースを表示するのではなく、コマンドをインタラクティブに表示するインタフェースが戻ってくることを望んでいます.このフラグを設定すると、画像添付ファイルをロードすると、それ自体とロードされたactivityが次回アプリケーションに戻ると削除されます.
例:
2つのactivity:MainActivityとActivity Aがあります.MainActivityからActivity Aを起動し、flag FLAG_を設定します.ACTIVITY_CLEAR_WHEN_TASK_RESET
	public void onClick(View arg0) {
		// TODO Auto-generated method stub
		Log.i(TAG, "--onClick--task id = " + getCurrentTaskId());
		Intent intent = new Intent("com.leaves.ipanel.ActivityA");    
		intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
	    startActivity(intent); 
	}

このときのスタックを見てみましょう.
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
  Main stack:
    TaskRecord{42593878 #4 A com.leaves.ipanel U 0}
    Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.leaves.ipanel/.MainActivity bnds=[163,708][307,852] }
      Hist #2: ActivityRecord{4267ccb0 u0 com.leaves.ipanel/.ActivityA}
        Intent { act=com.leaves.ipanel.ActivityA flg=0x80000 cmp=com.leaves.ipanel/.ActivityA }         ProcessRecord{4373d460 1722:com.leaves.ipanel/u0a10061}
      Hist #1: ActivityRecord{4266be38 u0 com.leaves.ipanel/.MainActivity}
        Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.leaves.ipanel/.MainActivity bnds=[163,708][307,852] }
        ProcessRecord{4373d460 1722:com.leaves.ipanel/u0a10061}
    TaskRecord{426f4820 #2 A com.android.launcher U 0}
    Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10600000 cmp=com.android.launcher/com.android.launcher2.Launcher }
      Hist #0: ActivityRecord{4291c7b0 u0 com.android.launcher/com.android.launcher2.Launcher}
        Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
        ProcessRecord{4267f0b8 636:com.android.launcher/1000}

次にhomeキーを押してlaunchに切り替え、launchからapkを起動し、このときタスクのresetを行います.見えるのはMainActivity.関連スタック:
ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities)
  Main stack:
    TaskRecord{42593878 #4 A com.leaves.ipanel U 0}
    Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.leaves.ipanel/.MainActivity bnds=[163,708][307,852] }
      Hist #1: ActivityRecord{4266be38 u0 com.leaves.ipanel/.MainActivity}
        Intent { act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=com.leaves.ipanel/.MainActivity bnds=[163,708][307,852] }
        ProcessRecord{4373d460 1722:com.leaves.ipanel/u0a10061}
    TaskRecord{426f4820 #2 A com.android.launcher U 0}
    Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10600000 cmp=com.android.launcher/com.android.launcher2.Launcher }
      Hist #0: ActivityRecord{4291c7b0 u0 com.android.launcher/com.android.launcher2.Launcher}
        Intent { act=android.intent.action.MAIN cat=[android.intent.category.HOME] flg=0x10000000 cmp=com.android.launcher/com.android.launcher2.Launcher }
        ProcessRecord{4267f0b8 636:com.android.launcher/1000}

Activity Aが破棄されているのが見えます.