티스토리 뷰

반응형

   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);
}

동적리시버는 등록과 해제가 자유롭게 이루어짐으로서 필요한 부분에 리시버를 등록하고 해지하면서 시스템이나 앱에 부하를 줄일 수 있다. 하지만  해제를 적절하게 해주지 않으면 메모리 릭이 발생한다.

반응형
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
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
글 보관함