디버그모드에서 unregisterReceiver 를 해도
리시버 객체가 그대로 있더라구요.
그리고 그대로 사용가능하구요..
unregisterReceiver 기능과 실제적으로 Broadcastreceiver 의 종료 시점을 알고싶습니다.
감사합니다.
그런데 unregisterReceiver 를 해도 그 기능이 계속 유지가 되더라구요.
그래서 가비컬랙터까지 호출해봤는데 그래도 전화 수신 차단 기능이 작동 됩니다 흑
분명 안되야 되는데 말이죠.!
//Button Listener
private View.OnClickListener mButtonEventListener = new View.OnClickListener() {
@Override
public void onClick( View view ) {
switch ( view.getId() )
{
case R.id.button_01:
if(isReceiveCall==false){
mRejectCallRecevier = new PhoneStateReciver();
ifPhoneState = new IntentFilter("android.intent.action.PHONE_STATE");
registerReceiver(mRejectCallRecevier, ifPhoneState);
mRejectButton.setText( "수신거부" );
isReceiveCall=true;
}
else if (isReceiveCall==true){
Log.d( TAG, "isReceiveCall==true" + isReceiveCall);
unregisterReceiver( mRejectCallRecevier );
mRejectCallRecevier = null;
ifPhoneState = null;
System.gc();
Log.d( TAG, "mRejectCallRecevier" + mRejectCallRecevier);
mRejectButton.setText( "수신함" );
isReceiveCall=false;
}
break;
default:
break;
}
}
};
아니요 분명히 주석처리했는데 그러네요 흑
<uses-sdk android:minSdkVersion="8" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Phone_Reject_PlanCode"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- <receiver android:name=".PhoneStateReciver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE"/>
</intent-filter>
</receiver> -->
</application>
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />




unregisterReceiver 를 하시게 되면 그 시점부터 리시버객체는 Intent를 못 받게 됩니다.
리시버 객체가 메모리상에서 그대로 있는 건 자바의 특성입니다.
아래와 같이 unregisterReceiver 후에 null을 지정하면 Garbage collection시 메모리상에서 정리되게 됩니다.
unregisterReceiver(mMyReceiver);
mMyReceiver = null;