• Daum
  • |
  • 카페
  • |
  • 테이블
  • |
  • 메일
  • |
  • 카페앱 설치
 
슈퍼드로이드
 
 
 
카페 게시글
검색이 허용된 게시물입니다.
안드로이드 기본 강좌 17. Broadcast Receiver에 대해서
슈퍼성근 추천 17 조회 26,790 11.09.15 16:17 댓글 30
게시글 본문내용
 
다음검색
첨부된 파일
댓글
  • 11.12.07 10:43

    첫댓글 그후 이미 등록된 Receiver 중 3번과 4번의 receiver가 그 메시지에 관심을 가지고 있으므로 동작하게 될 것이다.

    밑에 그림에서 보면 3번은 있는데 4번도 3번이라고 써져있네요ㅜ_ㅜ....

  • 작성자 13.01.07 17:27

    ^^ 제 의도는 3번이라고 쓰여진 그림 모두를 묶어서 3번이라고 한 것인데...
    오해할 수도 있겠군요.

    감사합니다.

  • 작성자 11.12.07 11:21

    ^^ 지적 감사합니다.

  • 12.02.22 17:10

    많은 도움이 되었습니다. 감사합니다~!

  • 12.02.22 19:28

    슈퍼성근님! 정적 리시버를 해제하고 싶을 때에는 어떻게 해야하나요?!

  • 작성자 12.02.22 19:45

    ^^; 정적 리시버는 해제 할 수 없습니다.
    처리하고 싶지 않을때는 receiver 소스에서 그냥 리턴해버리는 방법 밖에는 없네요.

  • 작성자 12.02.22 19:46

    앗 한가지 방법이 있다고 하자면 해당 receiver Component를 비활성화 시켜 버리는 방법도
    방법이라면 방법이네요. ^^

  • 14.04.03 19:51

    말씀하신 방법이 http://www.grokkingandroid.com/enabling-and-disabling-broadcastreceivers/ 여기 글에 해당되는 거 같습니다.

  • 12.02.23 02:14

    아하 ㅎㅎ 감사합니다 ^^

  • 12.03.14 11:04

    작살납니다!!

  • 12.06.06 00:00

    잘보고있습니다 예제중에
    정적 리시버는 아이스크림 버젼에서는 안되나요? 아무리 똑같이 해도 되질않네요...
    첨부된 테스트패키지도 버젼업도 안되고..

  • 작성자 12.06.07 11:56

    다음 강좌에서
    2.3 FLAG_INCLUDE_STOPPED_PACKAGES
    을 참조하세요.
    이 Flag는 Api Level 12(허니콤)부터 추가되었다.

  • 13.04.22 20:57

    manifest에 <uses-permission android:name="android.permission.INTERNET"/> 을 추가하니 제대로 동작하네요..
    저도 오늘 하루종일 헤맸습니다 ㅋㅋ

  • 12.08.28 15:33

    항상 강의내용 보고 가는 1인입니다.
    참고로 동적리시버의 경우 register만하고 unregister를 하지 않을 경우 메모리릭이 발생합니다.
    어떤 App A 의 onResume 에서 registerReceiver 을 하고 onPause 에서 아무런 행위를 하지 않을경우 ..
    A를 진입/취소 를 반복하게 되면 어느 순간 memory allocation error 를 발생하면서 A가 강제 종료 됩니다.
    요즘 기기들은 메모리가 커서 A한테 할당되는 힙이 여유가 좀 있어서 당장 눈에는 안띌지 모르지만 힙을 계속 차지하기때문에 A 실행속도가 느려진다거나 하는 문제점이 있습니다.
    메모리 누수는 개발자로서는 반드시 피해야될 기본중의 하나이기때문에 강조되었으면 좋겠습니다. ^

  • 12.08.31 11:51

    아하~ 그렇군요~ 액티비티 생명주기에 따라 실제로 동작을 안한다 하더라도 메모리는 차지하고 있다는 말씀이시군요??

  • 작성자 12.09.01 01:36

    매우 좋은 지적이십니다. 요즘 단말기에서는 많은 메모리를 지원함에 있어
    메모리 누수에 대한 고려를 많이 하지 않습니다.
    하나의 unregister 누락에 어느정도 메모리 누수가 생기는지는 측정해 보아야하겠지만
    개발자로써 인지해야 하는 필수 영역이라 생각합니다.

    감사합니다.

  • 13.01.08 09:49

    항상 도움 많이 받고 있습니다. 감사합니다.
    1.4 내용에 한가지 추가하자면, 동적 Receiver일 때는, 여러개의 Receiver가 있다고 해도 순서대로가 아니라 동시에 활성화가 되어 각각의 onReceiver() 일을 하게 됩니다. 동적 Receiver에서도 다른 Receiver와 순차적으로 일처리를 하고자 한다면 sendBroadcastOrdered()로 broadcast 할 수 있겠습니다.

  • 작성자 13.01.08 10:43

    좋은 정보 감사드립니다. ^^

  • 13.08.26 10:24

    질문이 있습니다. 그렇다면.... 정적 receiver경우 순차적으로 활성화 된다는 뜻일까요? broadcast timeout에 걸렸을경우 어느 애가 느리게 일을 처리해서 timeout이 걸렸는지 찾기가 힘드네요.

  • 작성자 13.08.26 11:03

    제가 알기로는 anr이 발생했을때 crash 로그를 보면 어떤 패키지가
    문제인지 알수 있습니다. ^^

  • 13.08.25 22:06

    안녕하세요~ BroadcastReceiver 를 만들때요~ Activity 없이 BroadcastReceiver 만 만들어주니 정적으로 manifest 에 추가해도 실행이 안되네요~

    Activity 없이 BroadcasrReceiver 만 달랑 존재하는 app 의경우는 Broadcast 를 수신받을 수 없는건가요?

  • 작성자 13.08.27 15:54

    결론부터 말씀드리자면 Broadcast 날리는 녀석이 어떤 Flag를 사용하냐에 따라
    받을 수도 있고 못 받을 수도 있습니다.

    그 플래그는 바로 FLAG_EXCLUDE_STOPPED_PACKAGES 입니다.

    이 플래그가 설정되면 아래의 리시버는 호출되지 않습니다.

    1) 한번도 실행된 적이 없는 앱
    Activity가 없다면 한번이라도 앱이 실행되기가 힘들겠네요.
    2) 프로그램 관리자에서 사용자가 의도로 강제로 종료한 경우

    이 경우를 모두 앱이 Stop 상태라고 보고
    리시버가 동작하지 않습니다.

    참고로 FLAG_EXCLUDE_STOPPED_PACKAGES가 API 13부터인가 ^^a
    굳이 추가하지 않아도 기본값이 된 것으로 알고 있습니다.
    그러므로 FLAG_INCLUDE_STOPPED_PACKAGES

  • 작성자 13.08.26 11:02

    어떤 Broadcast 이벤트를 받으시려는지
    확인해야 겠네요. ^^

  • 13.08.27 00:28

    슈퍼성근님 정말 감사드립니다.^^ 인터넷에서 뒤져봐도 안나오고 주변 사람들에게 물어봐도 모르는 내용이라 혼자 고민만 했었는데요~

    추가검색해보니,
    FALG_INCLUDE_STOPPED_PACKAGES : stop된 application도 target이 될 수 있다.

    FALG_EXCLUDE_STOPPED_PACKAGES : stop된 application도 target이 되지 않는다.




    위와 같이 2가지 플래그가 있으며,

    intent flag를 지정하지 않으면 default인 EXCLUDE가 지정된다.



    라고 나오네요...그래서 FLAG_INCLUDE_STOPPED_PACKAGES 추가해주었더니,
    ACTIVITY 없어도 RECEIVER 동작 잘 하고 있습니다.

    감사합니다.

  • 작성자 13.08.27 15:53

    잘 해결되셔서 다행이네요. 수고하셨습니다.

  • 14.01.14 14:08

    정적 Receiver 부분 정상적으로 동작하지가 않는데 어떤게 잘못된것인지 모르겠습니다...
    올려주신 소스를가지고 동작을 해보아도 Boreadcast 1 버튼 클릭시 아무반응도 나오질 않네요.

  • 작성자 14.01.14 15:31

    강좌 최신화가 되지 않았네요. 죄송합니다.

    해당 질문의 원인은 바로 FLAG_EXCLUDE_STOPPED_PACKAGES 속성 때문입니다.
    그러므로 정상적으로 정적리시버가 동작하려면
    FLAG_INCLUDE_STOPPED_PACKAGES 설정후 브로드캐스트를 날려야 겠네요.
    그 이유에 대해서는 위의 댓글에 설명되어 있으니 참조 부탁드립니다.
    감사합니다.

  • 15.10.11 16:17

    안녕하세요 1.4와 관련해서 궁금한 사항이있어서 질문 드립니다.
    그러면 어떤 broadcast에 대해 정적리시버 여러개와 동적 리시버 여러개가 등록 되어 있는데
    sendBroadcast() 로 broadcast를 송신한다면,
    동적리시버는 동시에 처리가 되고
    이후 정적리시버들은 priority에 의해 순차적으로 처리되게 되나요?

  • 15.10.14 21:08

    public void onClick(View v)
    {
    Intent intent = new Intent("android.intent.action.SUPERSK");
    intent.addFlags( Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    intent.setData(Uri.parse("sample:"));
    sendBroadcast(intent);
    }
    본문 예제를 수정했으나 오류가 납니다. 제가 잘못 수정했나요 ?

  • 17.05.18 10:54

    선생님의 글은 언제나 교과서처럼 반갑습니다.
    잘 보고, 도움이 되었습니다.
    (정적/동적) BroadcastReceiver 기초/[Android] http://blog.daum.net/andro_java/1226
    그런데,
    AndroidManifest.xml 파일에서
    <protected-broadcast android:name="android.intent.action.TEST" />
    지워도 실행에 아무 지장이 없는데 ...
    이것을 꼭 등록해야 되는지, 이름 TEST 키워드는 임의로 만들면 되는 것인지 ...
    잘 몰라서 도움을 구합니다.

최신목록