Android之FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值