您是否必须在 Android 个应用程序中注销 IntentService 广播接收器

Do you have to unregister IntentService Broadcast receivers in Android Applications

我当前的 Android 应用程序使用 IntentService 来调用 SOAP WebService。

IntentService returns SOAP 响应数据通过其 onHandleIntent() 方法

中的 LocalBroadcastManager 调用 activity
final Intent localIntent = new Intent(FASTEST_BROADCAST_ACTION);
localIntent.putExtra(FASTEST_EXTENDED_DATA, xmlUtility.getFastestServiceId());
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(localIntent);

我的调用activity在其onResume()方法

中注册了一个广播监听器,如下所示
@Override
protected void onResume() {
        super.onResume();

        mDepartureBroadcastReceiver = new DepartureBroadcastReceiver();
        final IntentFilter statusIntentFilter = new IntentFilter(FASTEST_BROADCAST_ACTION);
        LocalBroadcastManager.getInstance(getApplicationContext()).registerReceiver(mDepartureBroadcastReceiver, statusIntentFilter);
        Log.v(LOG_TAG, "Register receiver = " + mDepartureBroadcastReceiver);

    }

一切正常,调用 Web 服务并将所需的响应数据返回到我的 activity。

当我离开当前 activity 并尝试调用 unregisterReceiver

时出现问题

我的 onPause 方法中有这段代码:-

   /**
     * Dispatch onPause() to fragments.
     */
    @Override
    protected void onPause() {
        super.onPause();

        if (mDepartureBroadcastReceiver == null) {
            //INTENTIONALLY LEFT BLANK
        } else {
            try {
                Log.v(LOG_TAG, "About to unregister receiver");
                unregisterReceiver(mDepartureBroadcastReceiver);
                Log.v(LOG_TAG, "Successfully unregistered receiver");
            } catch (final Exception exception) {
                Log.e(LOG_TAG, "Failed unregistered receiver", exception);
            } finally {
                mDepartureBroadcastReceiver = null;
            }
        }
    }

我总是遇到这个异常:-

Failed unregistered receiver java.lang.IllegalArgumentException: Receiver not registered

接收者注册:-

注册接收者=com.aaa.bbb.departure.DepartureBroadcastReceiver@2879575

匹配异常:-

java.lang.IllegalArgumentException: Receiver not registered: com.aaa.bbb.departure.DepartureBroadcastReceiver@2879575

为什么会出现这个异常?

为什么我不能注销这个接收器?

是否是因为我在取消注册之前 IntentService 完成(例如调用它的 onDestroy() 方法)?

您没有使用 LocalBroadcastManager 注销。

你需要用到这个LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(mDepartureBroadcastReceiver);