2013-09-05 3 views
0
public class MyReceiver extends BroadcastReceiver { 
private static IReceiveMessage iReceiveMessage; 
@Override 
public void onReceive(Context context, Intent intent) { 
     iReceiveMessage.receiveMessage(intent.getStringExtra("message")); 
}  
public static void setReceiveMessage(IReceiveMessage iReceiveMessage1) { 
    iReceiveMessage = iReceiveMessage1; 
}} 

public interface IReceiveMessage { 
public void receiveMessage(String message); 
} 




public class MainActivity extends Activity implements IReceiveMessage{ 

    protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
       setContentView(R.layout.main); 
       MyReceiver.setReceiveMessage(this); 

} 
    @Override 
public void onReceiverMessage(String message) { 
Log.i("test", message); 

} 
} 

왜 Myactivity가 종료 된 후에도 Mainactivity는 여전히 메시지를 수신합니까?활동의 라이프 사이클 정보

+0

what's 목적? – Blackbelt

+0

MainAcitiy이 파괴되면 MyReceiver가 IReceiveMessage를 통해 여전히 메시지를 보낼 수있는 이유는 무엇입니까? –

답변

1
당신들의 OnDestroy()에서 활동 등록을 취소 할 필요가

:

protected void onDestroy() { 
     super.onDestroy(); 
     MyReceiver.setReceiveMessage(null); 
} 
+0

등록을 취소하지는 않았지만 MyReceiver에서 메시지를받습니다. –

+0

귀하의 의견을 이해할 수 없습니다. – flx

+0

MyReceiver가 브로드 캐스트를 수신하면 onReceive가 호출되고 MainActiviy가 메시지를 수신합니다. MainAcitviy가 소멸 될 때 gc에 의해 rcycled이기 때문에이 메시지를받지 못합니다. 하지만 제 경우에는 MainAcitvity가이 메시지를 받았습니다. 왜? –