Android LocalBroadcastManager

2017-07-09

android update kotlin develop tip

Android 에서는 BoradcastReceiver 를 사용해 앱 컴포넌트에서 원하는 범주의 이벤트를 수신할 수 있습니다. 예를 들면 배터리 상태나 네트워크 상태 등의 시스템 이벤트 부터, 개발자가 만든 커스텀 이벤트까지 다양하게 수신할 수 있습니다.

커스텀으로 이벤트(액션) 을 만들어 방송(Broadcast) 하는 것에는 여러 이유가 있습니다. 기기에 설치된 다른 앱이 본인이 개발한 앱으로부터 이벤트를 수신할 수 있도록 하려고 사용할 수도 있고, 같은 앱의 다른 컴포넌트간에 startActivity(), startService() 등 만으로 데이터를 주고받기 어려워서 사용할 수도 있습니다.

만약 같은 앱의 다른 컴포넌트간에 데이터를 주고받기 위해서 방송(Broadcast) 을 한다면, Android API 22 부터 추가된 LocalBroadcastManager 를 사용하는것이 더 효율적입니다. 기존의 방식(그냥 sendBroadcast() 호출)은 모든 앱에 방송을 하지만, LocalBroadcastManager 를 이용해서 방송할 경우, 같은 앱 내에 있는 앱 컴포넌트에만 방송이 되기 때문입니다. 글쓰면서 이제야 생각해보는건데 이거 뒷북이네… API 22 에서 추가된 거면… 확실히 뒷북이군… 왜 지금까지 모른거지…

LocalBroadcastManager 를 통해 방송하는 방법은 기존의 방법과 크게 다르지 않습니다. 그저 LocalBroadcastManager 객체를 하나 만들어서 해당 객체의 sendBroadcast() 를 호출할 뿐입니다.

예를 들어 Activity 에서 방송 하려는 경우 아래와 같은 코드를 작성할 수 있습니다.

...
val mLocalBM = LocalBroadcastManager.getInstance(this)
var intent = Intent("com.example.MY_LOCAL_BROADCAST")
mLocalBM.sendBroadcast(intent)
...

방송을 수신을 위해 리시버를 등록하거나 해제하는 경우도 크게 차이는 없습니다.

...
// A BroadcastReceiver
val receiver = object : BroadcastReceiver(){
        override fun onReceive(context: Context?, intent: Intent?) {
          // Do something with received broadcast
        }
    }
...
// Registering BroadcastReceiver using LocalBroadcastManager
val filter = IntentFilter("com.example.MY_LOCAL_BROADCAST")
val mLocalBM = LocalBroadcastManager.getInstance(this)
mLocalBM.registerReceiver(filter, receiver)
...
// Unregistering BroadcastReceiver using LocalBroadcastManager
mLocalBM.unregisterReceiver(receiver)
...

이렇게 앱 컴포넌트간에 BroadcastReceiver 를 통해 데이터를 주고 받아야 할때, 외부 앱에서 수신할 필요가 없거나 수신해서는 안되는 방송을 해야하는 경우, LocalBroadcastManager 를 이용하면 됨을 알 수 있습니다. 방법도 기존 방법과 크게 차이가 없습니다. 끝. 그냥 오세 안드로이드 삽질 다시 하다가 알게 되서 기록할 겸 블로그 글로 써 봤습니다.

참고로, LocalBroadcastManager 는 API 22 에서 추가 되었지만, v4 Support Library 에 포함된 것이여서 크게 안드로이드 버전에 신경쓰지 않고 사용할 수 있습니다.

참고자료

광고 차단 소프트웨어를 사용하고 계신 것 같습니다. 혹시 글이 마음에 들었다면, 광고 차단을 해제해 주시거나 후원을 해 주시는 것은 어떤가요?

It seems like you're using ad block software, If you like the post, Would you like to disable that or donate me a bit?

Shoes

Udacity Android Study 최종 해커톤 후기

2015-02-01

약 2개월 정도 간의 긴 스터디를 마치고, 드디어 최종 해커톤을 가졌습니다. 해커톤 이틀 전 사전 모임을 통해 대략 준비하고, 해커톤 당일인 1월 31일 아침 일찍 모여 출발 했습 …

Shoes

첫 외주

2016-11-26

프로그래밍을 지속적으로 해 왔고, 소프트웨어공학과 전공이지만, 여태까지 외주를 한 적이 없었습니다. 외주를 어디서 구하는 지도 몰랐고, …

Shoes

Dokku 설치 및 설정하기

2016-03-25

개인적으로 AWS EC2 인스턴스에 Dokku 라는 것을 설치해서 사용하는 중인데요. Dokku 는 Heroku 와 같은 일종의 PaaS(Platform as a Service) …