美文网首页
Context#startActivity()分析

Context#startActivity()分析

作者: Hsicen | 来源:发表于2019-11-11 19:09 被阅读0次

哪些 Context调用 startActivity 需要设置NEW_TASK,为什么?

  1. 最常见的就是 Application 需要设置 NEW_TASK了,为什么需要呢?

在开发中我们直接接触的Context主要有:Application,Activity和Service,他们三者都是间接继承自Context的;Context是一个抽象类,我们可以看它的最终实现类ContextImpl的startActivity,我们可以发现在ContextImpl#startActivity中,会对Intent.flag进行一系列的检查,用于判断把启动的Activity加入到哪个任务栈中,判断的大概意思就是除了Activity(Activity类覆盖了startActivity方法,允许新启动的Activity和当前Activity在同一个任务栈中)之外,其它的Context调用startActivity都必须加上FLAG_ACTIVITY_NEW_TASK,否者会直接抛出异常;判断后最终会调用Instrumentation.execStartActivity 执行跳转

比较有意思的是在TargetSDKVersion为24,25,26,27这些版本上,这个判断出现了Bug,也就是在这之间的版本上你可以不设置FLAG_ACTIVITY_NEW_TASK也可以利用非Activity的Context进行Activity的跳转,本应该为options == null的判断被写成了options != null,所以没有进入抛出异常的分支判断

联想到Android的四种启动模式(Standard,SingleTask,SingleTop,SingleInstance),Activity有一个Activity栈去管理它,如果你用一个非Activity的Context去启动一个Activity的话,新的Activity并不知道自己应该放在哪个Activity任务栈中,而设置上 FLAG_ACTIVITY_NEW_TASK 标记,就会直接创建一个 Activity 栈来管理它了。实际上,这样的启动方式就是以SingleTask模式启动的。

  1. 其他的 Context 呢?

BroadcastReceiver和ContentPrider都没有直接或者间接的继承Context,ContentProvider#getContext()得到的是Application的实例,而BroadcastReceiver#onReceiver中的Context参数是发送广播的那个Context实例

相关文章

  • Context#startActivity()分析

    哪些 Context调用 startActivity 需要设置NEW_TASK,为什么? 最常见的就是 Appli...

  • 常用数据分析方法

    对比分析(现状分析) 趋势分析(预测分析) 矩阵关联分析 分组分析(原因分析-分布情况) 漏斗...

  • 零售业大数据分析

    零售业数据分析包括: 财务分析销售分析商品分析顾客分析供应商分析人员分析 1 财务分析 1)分析企业的财务状况,了...

  • 分析分析分析

    新工作第三天,沒有前兩天覺得那麼難熬。也不是難熬,不過是有些覺得無所事事。今天用SQL導出了工作的數據,然後下午學...

  • 用数据驱动产品和运营 之 数据分析方法

    数据分析方法 多维事件分析 漏斗分析 留存分析 行为序列分析 A/B测试 用户分群 (一)数据分析——多维事件分析...

  • 9种常用的数据分析方法

    公式拆解、对比分析、A/Btest、象限分析、帕累托分析、漏斗分析、路径分析、留存分析、聚类分析 一、公式拆解 所...

  • 数据分析

    数据分析基本方法 对比分析(横向对比纵向对比) 趋势分析 象限分析 交叉分析 数据分析框架_AARRR分析 逻辑分...

  • OpenCV-Python学习(十):图像滤波之傅里叶变换

    滤波分析又分为 时域分析、频域分析: 时域分析: 直接对信号本身进行分析。 频域分析: 对信号的变化快慢进行分析。...

  • 7张脑图讲透如何做好品牌、价格、渠道、市场、机会分析

    1、品牌分析: 2、价格分析 3、广告分析 4、渠道分析: 5、市场机会分析: 6、满意度分析 7、市场细分分析 ...

  • 谁说菜鸟不懂数据分析-读书整理

    数据分析简述: 数据分析分类及作用: 分类:描述性分析,探索性分析,验证性分析 作用:现状分析,原因分析,...

网友评论

      本文标题:Context#startActivity()分析

      本文链接:https://www.haomeiwen.com/subject/moqxictx.html