启动新Activity Intent时,requireActivity()与requireContext()的区别是什么?
启动Activity时requireActivity()和requireContext()的区别
在Fragment场景下(这两个方法属于Fragment的API),启动Activity时使用两者的核心区别在于返回对象的类型和后续功能扩展的适配性,单纯启动Activity的动作本身两者都能完成:
返回对象类型不同
requireContext()返回的是Context实例,而requireActivity()返回的是当前绑定的Activity实例——要注意,Activity本身就是Context的子类,后者本质是前者的一个具体实现类。功能扩展的差异
如果你只是单纯启动新Activity,比如你给出的这两行代码:startActivity(Intent(requireContext(), A::class.java)) startActivity(Intent(requireActivity(), B::class.java))实际运行效果完全一致,因为
Intent只需要一个Context参数就能创建。但如果后续逻辑需要用到Activity的专属能力(比如调用startActivityForResult获取返回结果、调用finish()关闭当前页面、访问Activity的视图层级或FragmentManager等),就必须用requireActivity()拿到的实例,Context没有这些专属方法。生命周期安全的差异
两个方法都会在Fragment未绑定有效上下文/Activity时抛出IllegalStateException:requireActivity()要求Fragment必须处于与Activity绑定的状态(比如onAttach之后、onDetach之前),否则会报错。requireContext()允许Fragment持有Application级别的Context(如果Fragment未绑定Activity但仍有上下文),不过在正常的Fragment生命周期中,两者的有效范围基本重叠。
内容的提问来源于stack exchange,提问作者No_Name
相关产品推荐
相关产品推荐

