2017-01-24 9 views
0

현재 Android 애플리케이션은 IntentService을 사용하여 SOAP WebService를 호출합니다. Android 애플리케이션에서 IntentService 브로드 캐스트 리시버를 등록 해제해야합니까?

IntentService

onHandleIntent() 방법 내에서 LocalBroadcastManager 통해 호출 액티비티 SOAP 응답 데이터를 반환 그 onResume() 방법 다음

final Intent localIntent = new Intent(FASTEST_BROADCAST_ACTION); 
localIntent.putExtra(FASTEST_EXTENDED_DATA, xmlUtility.getFastestServiceId()); 
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(localIntent); 

부름 활성 방송 청취자를 등록

@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); 

    } 

모든 것이 잘 작동하고 웹 서비스가 호출되며 필요한 응답 데이터가 내 활동으로 리턴됩니다. 난 항상이 예외가

/** 
    * 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; 
      } 
     } 
    } 

: - - : 나는 현재 활동을 떠나 내 onPause 방법이 코드를 unregisterReceiver

를 호출 할 때

문제는 오는

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

수신자 등록 : -

java.lang.IllegalArgumentException: Receiver not registered: [email protected] 

왜이 예외가 발생 - :등록 수신기 = [email protected]

예외를 일치?

왜이 수신기를 등록 취소 할 수 있습니까?

등록을 취소하기 전에 내 IntentService 마무리 (예 : onDestroy() 메서드 호출)가 원인입니까?

답변

1

LocalBroadcastManager을 사용하여 등록을 취소하지 않았습니다.

당신은 내가 그 놓친 어떻게 아무 생각도 없어!이 LocalBroadcastManager.getInstance(getApplicationContext()).unregisterReceiver(mDepartureBroadcastReceiver);

+0

좋은 자리를 사용해야합니다. 고맙습니다 – Hector