티스토리 뷰
BroadCast Receiver란
안드로이드 4대 컴포넌트 중에 하나이다. 말 그대로 방송 수신자이며 시스템이나 앱 등에서 이벤트 발생시 방송을 해주는 개념이다. 이렇게 방송된 이벤트는 각 앱에서 필요한 방송 이벤트를 받아들이고 이벤트에 대한 처리를 리시버를 통해 할 수 있게 해준다.
SendBroadCast 방송 보내기
SendBroadcast라는 Context에 포함된 함수를 이용하여 인텐트를 전달한다. Intent에 putExtra를 통해 Integer, boolean, String 등 여러 단일 타입 또는 배열의 혈태로 전달 할 수 있다.
Intent sendIntent = new Intent("com.dwfox.myapplication.SEND_BROAD_CAST");
sendIntent.putExtra("isBoolean", true);
sendIntent.putExtra("sendInteger", 123);
sendIntent.putExtra("sendString", "Intent String");
sendBroadcast(sendIntent);
Receiver 방송 받기
SendBroadcast를 통해 전달된 Intent를 수신하는 리시버(Receiver)를 구현하여야 한다. 리시버에는 정적리시버와 동적 리시버가 있다.
정적 리시버 : 한 번 등록하면 해제할 수 없다.
정적리시버는 AndroidManifest.xml에서 recevier를 등록하여 사용하도록 한다. 아래와 같이 리시버를 사용할 클래스와 intent Action name을 등록한다.
<receiver android:name=".TestReceiver">
<intent-filter>
<action android:name="com.dwfox.myapplication.SEND_BROAD_CAST"/>
</intent-filter>
</receiver>
브로드캐스트 리시버 (BroadcastReceiver) 클래스를 구현하여 수신 처리를 등록한다.
public class TestReceiver extends BroadcastReceiver {
private static final String TAG = TestReceiver.class.getSimpleName();
@Override
public void onReceive(Context context, Intent intent) {
String name = intent.getAction();
// Intent SendBroadCast로 보낸 action TAG 이름으로 필요한 방송을 찾는다.
if(name.equals("com.dwfox.myapplication.SEND_BROAD_CAST ")){
Log.d(TAG, "BroadcastReceiver :: com.dwfox.myapplication.SEND_BROAD_CAST :: "
+ intent.getStringExtra("sendString")); // putExtra를 이용한 String전달
}
}
}
동적 리시버 : 등록과 해제가 자유롭다.
정적리시버와는 달리 AndroidManifest.xml에 추가로 입력 할 사항이 없다.
public class TestActivity extends Activity {
private static final String TAG = ReceiverVideoFinish.class.getSimpleName();
BroadcaastReceiver mReceiver;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//브로드캐스트의 액션을 등록하기 위한 인텐트 필터
IntentFilter intentfilter = new IntentFilter();
intentfilter.addAction("com.dwfox.myapplication.SEND_BROAD_CAST");
//동적 리시버 구현
mReceiver = new BroadcastRecevier(){
@Override
public void onRecevie(Context context, Intent intent){
String sendString = intent.getStringExtra("sendString");
Log.d(TAG, sendString);
}
};
//Receiver 등록
registerReceiver(mReceiver, intentFilter);
}
//등록된 Receiver는 반드시 해제 해주어야 한다.
unregisterReceiver(mReceiver);
}
동적리시버는 등록과 해제가 자유롭게 이루어짐으로서 필요한 부분에 리시버를 등록하고 해지하면서 시스템이나 앱에 부하를 줄일 수 있다. 하지만 해제를 적절하게 해주지 않으면 메모리 릭이 발생한다.
'Dev > Android' 카테고리의 다른 글
[Android] 안드로이드 버튼 효과 커스텀 - Selector (0) | 2016.01.24 |
---|---|
[Android] ProGuard 코드 난독화 / 최적화 설정 - Android Stuido (6) | 2016.01.18 |
[Android] CheckBox 커스텀 / Listener (0) | 2016.01.11 |
[Android Studio] Keymap 단축키(이클립스) 변경 (0) | 2015.12.18 |
[Android Studio] Javadoc 설정 (0) | 2015.12.16 |
- Total
- Today
- Yesterday
- 인스턴트
- 생성
- 라멘
- 하카타
- jar
- MongoDB
- 안드로이드 스튜디오
- java
- 맛집
- 설치
- 직화
- 돈돈
- Custom
- 컵라면
- Android Studio
- Android
- 리뷰
- 라면
- Android Stuido
- 에러
- 일식
- GS25
- library
- Python
- 예제
- 편의점
- 일본
- Picasso
- 후쿠오카
- 안드로이드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |