是否可以在片段中动态注册广播接收器以侦听连接状态变化?如果是这样的话?如果没有,片段有哪些变通方法?
编辑:要注册BroadcastReceiver,您需要一个上下文。由于片段存在于活动中,因此获取Context的最佳方法可能就是使用getActivity()。但是,正如gnorsilva在下面解释的那样,有一些特殊情况需要注意。
答案 0 :(得分:30)
user853583建议很好,但如果您需要访问片段内的上下文,则应使用getActivity().getApplicationContext()
您应该尽可能避免将活动作为上下文传递,因为这会引入内存泄漏 - 某些对象在调用onDestroy()之后将保留该活动,并且不会被垃圾回收。
话虽如此,有些情况下您需要将活动作为上下文传递 - 例如:for list adapters
但还有两件事:
因为片段是从活动中附加和分离的,有时getActivity()
返回null - 您可以在某些生命周期方法中安全地调用它,在这些方法中您知道某个活动是活着的,例如:onResume()
如果您的片段没有保留其实例,即在方向更改时被销毁,请务必取消注册片段中的接收器,例如在onPause()
或onDestroy()
答案 1 :(得分:3)
据我所知,无法在片段中注册BroadcastReceiver。你需要那个广播接收器?一个很好的解决方案是提到的here
答案 2 :(得分:1)
您可以注册这样的广播接收器: getActivity()。registerReceiver(...