繁体   English   中英

片段中的动态广播接收器

[英]Dynamic Broadcast Receiver in Fragment

是否有可能在片段中动态注册广播接收器以侦听连接状态变化? 如果是这样的话? 如果没有,片段有哪些变通方法?

编辑:要注册BroadcastReceiver,您需要一个Context。 由于片段存在于活动中,因此获取Context的最佳方法可能就是使用getActivity()。 但是,正如gnorsilva在下面解释的那样,有一些特殊情况需要注意。

user853583建议很好,但如果你需要访问片段内的上下文,你应该使用getActivity().getApplicationContext()

您应该尽可能避免将活动作为上下文传递,因为这会引入内存泄漏 - 某些对象在调用onDestroy()之后将保留该活动,并且不会进行垃圾回收。

话虽如此,有些情况下您确实需要将活动作为上下文传递 - 例如:用于列表适配器

还有两件事:

  • 因为片段是从活动附加和分离的,所以getActivity()有时会返回null - 你可以在某些生命周期方法中安全地调用它,你知道一个活动是活着的,例如: onResume()

  • 如果您的片段没有保留其实例,即在方向更改时被销毁,请确保在片段中取消注册您的接收器,例如在onPause()onDestroy()

据我所知,没有办法在片段中注册BroadcastReceiver。 你需要那个广播接收器? 一个很好的解决方案是这里提到的

您可以注册这样的广播接收器:getActivity()。registerReceiver(...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM