取消注册broadcastreceiver无法正常工作

时间:2016-02-17 01:28:56

标签: android android-fragments broadcastreceiver

我正在使用动态广播接收器,我想在切换飞机模式时接收事件。 步骤中的问题:

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();
}

0 个答案:

没有答案