ApplicationContext 启动Activity引发的崩溃异常

       最近在重温四大组件的时候,发现一个有趣的问题。因为记得之前阅读《Android开发艺术探索》的时候,发现非Activity类型的Context启动去启动另一个Activity的时候会报Calling startActivity() from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.Is this really what you want? 的崩溃异常。然而我在测试的时候使用getApplicationContext().startActivity()却可以正常的跳转。对事情产生疑惑,经过百度,然后自己进行验证事情的真相。

        打开Android Api级别为28源码,发现ContextImpl的startActivity方法一切都阔然开朗了。

API28 ContextImpl

        即使不看代码,方法注释也说的很明白了,也就是说不是Activity类型的Context去启动另一个Activity需要加上FLAG_ACTIVITY_NEW_TASK的FLAGS,除非调用者指定了任务栈,否则就会抛出异常。这是一个错误存在于N和O-MR1之间。其他版本API会造成崩溃异常。我在小米8 Android 9.0上测试也确实崩溃了,日志也显示以上异常。


API 27ContextImpl

        对比API27(O-MR1) ContextImpl源码,发现27 将option作为一个判断条件去判断是否应该抛出异常。而当使用getApplicationContext().startActivity(intent)的时候,它就跳出了if 条件语句了。

感谢 https://www.wandouip.com/t5i374600/

疑问解决,我又有了一个疑问了,既然这个问题应该是解决非Activity类型Context启动另一个Activity崩溃问题,因为非Activity类型的Context没有所谓的任务栈,那么N 到 O-MR1版本为什么跳过if语句也不会崩溃呢?

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容