FLAG_ACTIVITY_NEW_TASK使用场景及原理简析

FLAG_ACTIVITY_NEW_TASK使用场景及原理简析在非Activity(比如Service,BroadcastReceiver)中startActivity需要添加flagIntent.FLAG_ACTIVITY_NEW_TASK。否则会报Crash:android.util.AndroidRuntimeException:CallingstartActivity()fromoutsideofanActivitycontext…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

在非Activity(比如Service,BroadcastReceiver)中startActivity需要添加flag Intent.FLAG_ACTIVITY_NEW_TASK。否则会报Crash:android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.

原文地址

以下Service为前提说明

简单来说:

每个Activity启动都需要依赖一个Task栈,在Service中启动Activity时一般使用ApplicationContext,它没自己的Task栈,(Activity有自己的栈,但Service中保存Activity实例容易造成内存泄漏)。

补充说明:

在MainActivity启动时,系统自动创建了App的Task栈,并且taskAffinity默认为包名:com.test.haha
以下为三种情况:

  • 情况1:只在Activity添加FLAG_ACTIVITY_NEW_TASK
    使用Task栈和MainActivity的Task栈是一样的,因为没有在AndroidMainfest添加taskAffinity,那么taskAffinity的默认值为包名即com.test.haha

  • 情况2:只在AndroidMainfest添加taskAffinity 不添加flag,无效

  • 情况3:同时在Activity添加FLAG_ACTIVITY_NEW_TASK 和 在AndroidMainfest添加taskAffinity(若指定为包名,则转到情况1)

    则创建新的Task栈,行为同启动模式singleTask。

可以使用adb shell dumpsys activity activities 或者 打印getTaskId()来验证。

请参考Google文档:任务和返回栈

注意: 当调用者需要从启动的Activity获取返回结果时,不能使用此标志。即使用startActivityForResult()要注意,没有返回值的。(见官网注释最后一句)

官网注释:

FLAG_ACTIVITY_NEW_TASK

If set, this activity will become the start of a new task on this history stack. A task (from the activity that started it to the next task activity) defines an atomic group of activities that the user can move to. Tasks can be moved to the foreground and background; all of the activities inside of a particular task always remain in the same order. See Tasks and Back Stack for more information about tasks.

This flag is generally used by activities that want to present a “launcher” style behavior: they give the user a list of separate things that can be done, which otherwise run completely independently of the activity launching them.

When using this flag, if a task is already running for the activity you are now starting, then a new activity will not be started; instead, the current task will simply be brought to the front of the screen with the state it was last in. See FLAG_ACTIVITY_MULTIPLE_TASK for a flag to disable this behavior.

This flag can not be used when the caller is requesting a result from the activity being launched.

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/185379.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • jsp:include引入jsp文件的时候(如果被包含的文件存在js文件),不要用相对路径

    jsp:include引入jsp文件的时候(如果被包含的文件存在js文件),不要用相对路径先回忆一下二者的区别(对于此篇文章而言,二者在用法上没有区别) jsp:include是先编译一下included.jsp文件,然后再包含 先编译,后包含@ include是先把文件包含就来,然后统一编译 先包含,后编译  今天下午想把jQuery集成到项目中,发现怎么样都会出问题。原因就是路径问题。在集成时,我的思路是…

  • uos访问windows共享打印机_Linux打印机安装命令

    uos访问windows共享打印机_Linux打印机安装命令Unraid安装CUPS实现共享打印和无线打印2020-11-2916:08:3451点赞486收藏51评论创作立场声明:个人瞎折腾,文中部分内容来自网络,本人并非专业人士,只是将个人的折腾经验分享给大家,如有错误请大家指正今年上半年买了一台高配蜗牛,蜗牛D的机箱、G5400的cpu、B365的板子,就开始了一系列的折腾,更换了8700tescpu,带pcie插槽的蜗牛C机箱,4口pci…

  • js模糊查询

    js模糊查询$(function(){var$resourceTitle=$(“#resourceTitle”);$resourceTitle.on(‘keyup’,function(){varresourceTitle=$.trim($resourceTitle.val());query();})functionquery(){if(resourceTitle.length==0){

  • 使用USB转485编程电缆连接西门子 S7-200的软件配置方法以及可能出现的问题[通俗易懂]

    使用USB转485编程电缆连接西门子 S7-200的软件配置方法以及可能出现的问题[通俗易懂]1安装驱动与PC-PPI编程电缆不同,USB转485编程电缆通常需要驱动。驱动安装完成后,将电缆插入电脑USB口,打开电脑设备管理器,观察端口COM是否生成。未插入编程线缆之前不存在COM3。2配置编程软件打开编程软件,点击【设置PG/PC接口】,选择【PC/PPIcable(PPI)】接口:点击属性,注意在【PPI】栏中不能勾选【高级PPI】和【多主站网络】:在【本地连接】中选择与设备管理器中一致的端口,此处为COM3:点击确定退出,软件配置完成,PC与PLC连接成功。.

  • python之for循环详解_python循环5次

    python之for循环详解_python循环5次目录1、可以明确循环的次数2、iteratle_object(可迭代对象)3、enumerate()使用方法为4、补充:统计文件行数可以这样写:1、可以明确循环的次数遍历一个数据集内的成员 在列表解析中使用 生成器表达式中使用2、iteratle_object(可迭代对象)String(字符串) List(列表) Tuple(元组) Dictionary…

  • ps入门视频全套教程零基础,ps教程百度云分享新手必看!「建议收藏」

    ps入门视频全套教程零基础,ps教程百度云分享新手必看!「建议收藏」链接:https://pan.baidu.com/s/1pQmEc-XgquF1jBXIoS6-Gg提取码:lcrw自学PS的第一步:安装软件!遇到过很多想学PS的伙伴,60%的新手都折在了软件安装这一步。新版PS一定比旧版好用,别听那些“大神”的言论,他们只是对曾经需要大力气去人工实现的功能被新版一键取代的感觉不爽罢了。第二步:想清楚学习PS的目的安装好PS,你就要想想学习PS的目的是啥了。如果你只是平时做个套版海报,帮女朋友P个照片,抠个图,免费的教程足够!但是..

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号