您是否必须在 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);
我当前的 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);