정상에서 IT를 외치다

[Android] LocalBroadcastManager 사용법 본문

안드로이드

[Android] LocalBroadcastManager 사용법

Black-Jin 2018. 4. 14. 21:57
반응형

안드로이드에는 4가지 컴포넌트가 있습니다.


1. 엑티비티(Activity)

2. 서비스(Service)

3. 방송수신자(Broadcast Receiver)

4. 콘텐트 제공자(Content provider)


3번 방송수신자에서 LocalBroadcastManager 사용법에 대해 알아보겠습니다.


* Global Broadcast 

- 일반적으로 이야기하는 Broadcast 이다. 프로세스 간의 경계를 무시하고 안드로이드 시스템 상에 등록된 모든 Receiver 들에게 전달된다.


* Local Broadcast

- 현재 프로세스 안에만 유효한 Broadcast 이다. 엑티비티 내부 객체간의 상호 의존성을 낮추어 깔끔한 프로그램 구조를 만들 수 있고 우리 앱의 정보를 밖으로 유출 하지 않는다.


LocalBroadcastManager 는 Loacal Broadcast 입니다.


1. 응답을 받아 처리할 부분(MainActivity)에 BroadcastReceiver 을 설정해 줍니다.

private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// intent ..
}
};

그리고 해당 리시버를 아래 코드와 같이 MainActivity 의 onCreate 부분에 연결해 줍니다.

LocalBroadcastManager.getInstance(this).registerReceiver(mBroadcastReceiver,
new IntentFilter("blackJinData"));

이때 IntentFilter 이름을 사용하는 용도에 맞춰서 적으시면 됩니다.


저는 'blackJinData' 라고 하겠습니다.


@Override
protected void onDestroy() {
super.onDestroy();
LocalBroadcastManager.getInstance(this).unregisterReceiver(mBroadcastReceiver);
}

onCreate 에 리시버를 연결해 줬으니깐 onDestroy 에서는 리시버를 해체해 줍니다.


2.  해당 리시버를 발동 시키기 위해서는


Intent intent = new Intent("blackJinData");
intent.putExtra("data1", "black");
intent.putExtra("data2", "Jin");
intent.putExtra("data3", "Data");

LocalBroadcastManager.getInstance(context).sendBroadcast(intent);

위와 같이 리시버에 설정해 두었던 "blackJinData" 라는 이름의 Intent 와 보내고 싶은 데이터들을


넣어서 보내면 mBroadcastReceiver 의 onReceive 에서 받아 처리할 수 있습니다.


intent 에 data1, data2, data3 를 넣어서 보냈습니다. 


그럼 1번에서 mBroadCastReceiver 을


private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// intent ..
String data1 = intent.getStringExtra("data1");
String data2 = intent.getStringExtra("data2");
String data3 = intent.getStringExtra("data3");

}
};

위와같이 설정하면


black Jin Data 라는 3개의 데이터가 들어오는 것을 확인할 수 있습니다.

[MainActivity::onReceive]data1 : black , data2 : Jin , data3 : Data


이렇게 BroadcastReceiver 을 사용하여 각기 다른 화면 에서 정보를 전달하거나 함수를 실행할 수 있습니다.

반응형
Comments