片段中的动态广播接收器

The*_*heo 22 android broadcastreceiver android-fragments

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

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

gno*_*lva 30

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

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

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

还有两件事:

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

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