Programming/Android Java

LocalBroadcastManager

개Foot/Dog발?! 2014. 6. 12. 18:46

URL : http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html


정리 보단 지나가는 내용을 스크랩하기 위해 쌓았는데


일단 이것은 대충 정리해보겠다.


보다시피, google에서 배포하는 library이며, 현재 v4, v7, v8, v13이 있다.

v4는 내가 알기로는 2011년즈음에 나온 library이며, android 1.6이상에서 3.0 이상에서 탑재된 Fragment등을 지원하기 위해 등장했다.(사실 Honeycomb과 이 라이브러리의 Fragment와 사용법이나 지원되는 API가 다소 차이가 있다.)


이 Support Libarary들의 설명은

아래 링크를 참조하길 바란다.


Android Support Library package

URL : http://developer.android.com/tools/support-library/features.html#v4


여기에 v4에서 LocalBroadcastManager를 지원한다.

보통 Intent들이 Android 시스템 전체에서 받을 수 있지만.

이것을 사용하면 하나의 프로세스 안에서만 Intent를 주고 받을 수 있다.


Message를 이용하는 것과 어떤 시스템적 성능적 차이가 있을지 따져보지 않아서 모르겠지만,

각각 장단점이 있을 것으로 보이는데

일단 외관상 보면 Message보다 결합도를 더욱 낮추고 쉽게 구현할 수 있을 것 처럼 보인다.


지원하는 API는 다음과 같다.


LocalBroadcastManager getInstance(Context context)

: 이 LocalBoardcastManager를 통해서만, Local에서만 사용가능한 intent를 send 와 receiver를 사용할 수 있도록 지원한다. singletone으로 구성된 것으로 보이며(시간상 내부소스까지 볼 여유가 없다 언젠가 다음을 기약하겠다...;;), 사용자가 new LocalBoardcastManager()를 사용해서 만들수 없고 오로지 이 LocalBoardcastManager의 getInstance()를 통해서만 사용가능한 instance를 가져올 수 있다.


void registerReceiver(BroadcastReceiver receiver, IntentFilter filter)

: LocalBroadcastManager class의 method. BroadcastReceiver와 filter를 등록하여 Receiver를 등록한다.


boolean sendBroadcast(Intent intent)

: 일반적인 sendBroadcast와 같은 method이다. 하지만 LocalBoardcastManager의 method이기 때문에 LocalBoardcastManager의 instance를 통하여 호출 해야 하고, 그러면 보내진 intent는 Local에서만 intent를 받을 수 있게 된다.


void sendBroadcastSync(Intent intent)

: 형식은 위의 sendBroadcast()와 같다. 당연히 LocalBoardcastManager의 instance를 통해서 호출해야 하며, 특징은 sync라고 뒤에 붙어 있듯. 받는쪽과 동기화를 시킨다.

이 말은 무슨 말이냐 하면, 내 프로세스의 등록된 Receiver의 onReceiver()의 호출이 후 return되어 종료될 때까지, lock이 걸린다.


void unregisterReceiver(BroadcastReceiver receiver)

: 사용법은 일반적인 unregisterReceiver와 같다. 이 역시 LocalBoardcastManager의 instance를 통해 호출 되어야 한다.


android developer blog에서는 사용 예를 언급이 안되어 있고

android developer training에서 짧은 예제를 볼 수 있다.

URL : http://developer.android.com/training/run-background-service/report-status.html


보다 쓸만한 상세한 예제는 언젠가 남겨두도록 하겠다. 기본적으로 Intent와 Broadcast를 다룰줄 아는 사람이라면 바로 이해 할 것으로 생각한다.

(짜는 것도 시간 낭비라.... (일도 많고 바쁜 핑계가...쿨럭..;;;)내가 개인적으로 필요성을 느껴 더 파고 싶으면 소스가 있을 수 있겠지만.. 지금 그 정도까지 안해도 될 듯 해서;;;)


그럼 여기까지.