FLAG_ACTIVITY_TASK_ON_HOME作用

最近做项目时测试提了个问题:查看联系人时,收到新短信,查看短信后,按返回键,回到了launcher而不是联系人(其实不一定要是联系人,其他应用也一样)。看到这个问题第一感觉是“这个问题和应用的启动模式和Flag有关”,然后觉得这不是问题。测试备注了这个”问题“Google对比机上也存在,本来想直接关掉的,但是想想具体原因自己也不清楚,还是看下吧。

这种问题一般看下启动时的flag就能大概找到问题的原因,想看启动时的flag可以通过Android studio调试,也可以直接看log,一般直接用logcat,因为比较简单。抓了下从接收到短信点击通知进入短信到返回桌面的log:

1
2
01-15 08:30:52.510   894  1114 I ActivityManager: START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x1000c000 cmp=com.google.android.apps.messaging/.ui.conversationlist.ConversationListActivity} from uid 10082
01-15 08:30:52.584 894 1114 I ActivityManager: START u0 {dat=content://com.google.android.apps.messaging.shared.datamodel.BugleContentProvider/conversations/1 flg=0x14000001 cmp=com.google.android.apps.messaging/.ui.conversation.ConversationActivity (has extras)} from uid 10082

其中uid为10082的应用就是com.google.android.apps.messaging。可以看到点击通知后是先进入.ui.conversationlist.ConversationListActivity然后再跳转到.ui.conversation.ConversationActivity的。启动.ui.conversationlist.ConversationListActivity时的flag是0x1000c000,可以拆分成三个flag的组合:

  • 0x10000000:FLAG_ACTIVITY_NEW_TASK
  • 0x00008000:FLAG_ACTIVITY_CLEAR_TASK
  • 0x00004000:FLAG_ACTIVITY_TASK_ON_HOME

第三个flag看起来很像是造成问题的原因,来看下注释:

1
2
3
4
5
6
7
8
/**
* If set in an Intent passed to {@link Context#startActivity Context.startActivity()},
* this flag will cause a newly launching task to be placed on top of the current
* home activity task (if there is one). That is, pressing back from the task
* will always return the user to home even if that was not the last activity they
* saw. This can only be used in conjunction with {@link #FLAG_ACTIVITY_NEW_TASK}.
*/
public static final int FLAG_ACTIVITY_TASK_ON_HOME = 0X00004000;

也就是说添加这个flag会导致新启动的stack放到当先home activity stack上,再加上FLAG_ACTIVITY_NEW_TASK和FLAG_ACTIVITY_CLEAR_TASK这两个flag,最后的结果就是创建一个新的stack并把activity放到这个stack里,然后把这个stack放到home activity stack上面,该stack变成可见stack,home在它下面,所以这个stack中的activity中的activity都销毁后,home activity stack就会变成可见stack,所以这个问题里按home键会直接从Message进入到launcher。

Powered by Hexo and Hexo-theme-hiker

Copyright © 2018 - 2022 得一 All Rights Reserved.

访客数 : | 访问量 :