我正在使用动态广播接收器,我想在切换飞机模式时接收事件。 步骤中的问题:
1 - 我在fragment.onResume()中注册我的广播并在fragment.onPause()
中取消注册2 - 当方向第一次改变时,消息日志会在onResume方法中显示一条消息(当我再次注册时)
android.app.IntentReceiverLeaked: Activity my.package.pj.HomeActivity has leaked IntentReceiver my.package.pj.usecases.AirplaneReceiver@3ce61109 that was originally registered here. Are you missing a call to unregisterReceiver()?
(我在onPause上取消注册,你还记得吗?)
3 - 当方向第二次改变时,日志会在onPause方法中显示一条消息(当我再次注销时)
IllegalArgumentException: Receiver not registered: my.package.pj.usecases.usecases.AirplaneReceiver@3ce61109
我把日志检查是否每次调用registerReceiver时我都会调用unregisterReceiver并且它按预期工作。
我认为unregisterReceiver方法有问题而且我的广播接收器没有注册,并且由于任何原因这个接收器从未注册过更多。你知道我做错了什么,或者这是一个知识渊博的知识错误吗?
这是我的代码:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
mReceiver = new AirplaneReceiver();
mIntentFilter = new IntentFilter(Intent.ACTION_AIRPLANE_MODE_CHANGED);
}
public void onResume(){
super.onResume();
getActivity().registerReceiver(mReceiver, mIntentFilter);
}
public void onPause(){
getActivity().unregisterReceiver(mReceiver);
super.onPause();
}