片段中的动态广播接收器

时间:2012-01-05 03:56:21

标签: android broadcastreceiver android-fragments

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

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

3 个答案:

答案 0 :(得分:30)

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

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

话虽如此,有些情况下您需要将活动作为上下文传递 - 例如:for list adapters

但还有两件事:

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

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

    <内/ LI>

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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