티스토리 뷰
반응형
Global Broadcast의 문제점?
Broadcast를 프로세스의 경계를 무시하고 안드로이드 시스템에 등록된 모든 Receiver에게 전달한다.
앱이 발생한 Broadcast의 정보를 다른 앱이 관찰 또는 감시할 수 있다.
(앱의 행위를 제3자가 알 수 있기 때문에 보안상 문제가 될 수 있다)
추가적으로 Receiver는 Broadcast가 전송될 때마다 리소스를 소비하기 때문에 시스템에 부하가 된다.
자기 앱내에서만 알 수 있는 Receiver와 Broadcast를 구현하고 싶다.
만약 유명한 Application에서 내부에서 Broadcast보내는 것을 Global Broadcast로 사용하게 되면, 악성 앱을 생성해 유명한 Application에서 보내는 Broadcast를 받도록 할 수 있고, 그 내부에 존재하는 민감한 정보를 확인할 수 있는 보안상의 문제가 있을 수 있다는 말이다.
Local Broadcast
Broadcast를 발생시킨 앱 밖으로 방송을 하지 않는다. 앱 내부에 존재하는 Broadcast Receiver만이 이 Broadcast를 받아 이벤트를 발생시킬 수 있다.
Broadcast를 사용할 때 Action명을 정해서 사용할 경우 Local Broadcast를 사용하는게 좋을 듯하다.
Local Broadcast를 보내는 코드는 어떻게 작성하는지 살펴보자
Intent intent = new Intent();
intent.setAction("ch4njun_action");
LocalBroadcastManager broadcastManager = LocalBroadcastManager.getInstance(this);
// Singleton Pattern으로 구성되어 있고만..
broadcastManager.sendBroadcast(intent);
Intent intent = new Intent("ch4njun_action");
LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
그러면 이렇게 보내진 Local Broadcast 를 수신하는 방법을 살펴보자.
한가지 기억해야 할 것은 Local Broadcast는 동적 Broadcast Receiver로만 받을 수 있다는 것이다.
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction("ch4njun_action");
BroadcastReceiver br = new BroadcastReceiver() {
public void onReceive(Context context, Intent intent) {
...
}
};
// 이게 register 과정을 대신하는 핵심코드~
LocalBroadcastManager.getInstance(this).registerReceiver(br, intentFilter);
그럼 이걸 도대체 어디다쓰냐... 뭐 이런생각이 스쳐지나간다. 어차피 같은 APP에서면 Broadcast를 안쓰는 방법이 더 낫지않나 뭐 이런생각..?
그래서 상황 하나를 적어놓고 넘어간다.
해당 App에서 Service Component가 존재한다고 했을 때, Service Component에서 Broadcase Receiver를 등록하고, 어떤 Broadcast가 넘어오냐에 따라서 Service의 동작을 달리하고 싶은 상황이 있을 수 있다.
예를 들면, Service가 음악을 백그라운드 재생해주는 역할을 수행하는데 Broadcast로 "PLAY" 데이터가 넘어오면 재생을, "PAUSE" 데이터가 넘어오면 정지를 수행할 수 있다는 뜻이다.
반응형
'Android > Concept' 카테고리의 다른 글
[Android] 파일과 데이터베이스 (0) | 2020.12.01 |
---|---|
[Android] Remote Bound Service (AIDL 사용) (0) | 2020.11.30 |
[Android] Broadcast Receiver 의 ANR (0) | 2020.11.25 |
[Android] Activity간 데이터 주고 받기 (0) | 2020.10.12 |
[Android] Remote Bound Service (0) | 2019.08.28 |