在讨论今天的内容之前我们先看一段代码: 请问?上述代码是否正确 没错,这就是一个简单的Activity启动此时,机智的童鞋A默默的祭出demo大法安装至自己的魅族16th(android8.0)然后发现流暢运行,毫无障碍然后童鞋B飞速效仿之,一个分毫不差的demo在低端三星机(Android4.4)上安装后结果被无情的送了一个异常。 那么看到这里就有了┅些疑问。
首先我们来看一张图这张图表示了Context里的基本继承关系。
看了上面的Context继承图,相信大家对为什么Activity启动Activity和Service启动Activity有差異有了一定的想法那么到底差异在哪里呢? 上面我们可以看到activity调用startActivity时并不需要flag。但是service到底是需要还是不需要flag呢为什么会出现有时候需要有时候不需要的情况? 上图是Activity启动权限图,我们可以看到除了Activiy以外其他组件都是不允许启动Activity的。但是上述A同学的魅族16th(android8.0)却能流畅运行這是为什么呢? 然后我们来看看高版本(android 8.0) 通过上面我们可以看到其实是因为google的大佬,在android7.0 android8.0版本出现了一个bug导致程序逻辑绕过了flag参数的验證所以,对应的正确逻辑应该如Activity启动权限图所示其他组件要启动actvicity是需要添加flag标记的。
既然添加了flag后其他组件就可以正常调用startActivity启动Activity那為什么activity启动权限表上除了Activity其他组件都是NO!这样调用与我们正常使用Activity调用有什么区别呢?会不会出现一些其他问题答案是会!
为什么要将activity与其他组件区分对待呢同样的我们举个栗子。
|
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。