2013-03-24 2 views
6

응용 프로그램의 다른 위치에 배치 할 수있는 사용자 정의보기를 만들었습니다. 뷰 내부에서 BroadcastReceiver를 사용하여 나머지 응용 프로그램에서 메시지를 가져 오는 것을 피할 수는 없습니다.사용자 정의보기 내 로컬 방송에 등록

나는 그것을 읽은 적이 있지만 (Where should I unregisterReceiver in my own view?), 사용하기로 선택한 경우 BroadcastManager에서보기를 등록 취소 할 장소가 있습니까?

답변

5

LocalBroadcastManager를 사용하는 것이 좋습니다. 인 텐트는 애플리케이션 내부에서만 볼 수있는 BroadcastReceiver와 같습니다.

내가 뭘지만, 이후 사용자 정의보기 (안 등들의 OnDestroy이있는 활동)의 작성시 등록하고있어 사실이다
private BroadcastReceiver receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 
     // your code here 
    } 
}; 

@Override 
protected void onPause() { 
    LocalBroadcastManager.getInstance(this).unregisterReceiver(receiver); 
    super.onPause(); 
} 

@Override 
protected void onResume() { 
    LocalBroadcastManager lbm = LocalBroadcastManager.getInstance(this); 
    IntentFilter filter = new IntentFilter(); 
    filter.addAction(MyClass.MY_ACTION); 
    lbm.registerReceiver(receiver, filter); 
    super.onResume(); 
} 
+0

- 난 내 수신기의 등록을 취소 할 수있는 적절한 장소를 찾을 수 없습니다. 그래서 현재 나는하지 않습니다./ –

+3

보기 (또는 사용자 정의보기)에는 활동이나 서비스와 같은 라이프 사이클이 없으므로 파괴되거나 숨겨진시기를 알 수 없습니다. 모든 뷰의 모든 등록/등록 취소 조치를 포함하는 활동에서이를 제어해야합니다. – vggonz

+0

나는 이것이 사용자 정의보기가 이러한 의미에서 독립적 일 수 있기를 희망하지만 답변으로 받아 들일 것입니다. 정말 제한적입니다 ... 누군가 내가 듣고 싶다는 생각을 가지고 있다면, 고마워요. –

관련 문제