Android之FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

来源:互联网 发布:广州腾科java培训 编辑:程序博客网 时间:2024/06/05 14:20
FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET:重置该task时清除该activity

这个标志将会非常有用当你想在你的应用中有个逻辑切换,例如,一个 e-mail的应用可能用于一个命令去显示附件,这个命令启动一个图片浏览的activity去显示附件,这个activity是e-mail应用的一部分,因为它是用户完成这件事情的一部分。但是,当用户离开这个e-mail应用,一段时间过后用户又从home选择这个应用,我们更希望这个时候回到的界面是显示命令用于交互的界面,而不是显示附件的图片界面。通过设置这个标志,当加载图片附件时,包括它本身及它加载的activity在下一次回到该应用时都会删除


实例:

我们有两个activity:MainActivity和ActivityA.,从MainActivity启动ActivityA,我们设置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}  


可以看到ActivityA被销毁了。
0 0
原创粉丝点击