• Daum
  • |
  • 카페
  • |
  • 테이블
  • |
  • 메일
  • |
  • 카페앱 설치
 
슈퍼드로이드
 
 
 
카페 게시글
검색이 허용된 게시물입니다.
안드로이드 기본 강좌 19. Service 에 대해서 - Service 의 확장 IntentService에 대해서
슈퍼성근 추천 15 조회 9,549 13.01.17 15:46 댓글 18
게시글 본문내용
 
다음검색
첨부된 파일
댓글
  • 13.01.22 19:21

    첫댓글 항상 좋은 강좌 감사드립니다. 기대하겠습니다.

  • 작성자 13.01.22 22:49

    끝까지 읽어 주셔서 감사드립니다

  • 13.02.12 22:02

    서비스편 잘 봤스니다. 너무 좋은 강좌 감사드립니다..^^

  • 작성자 13.02.13 09:26

    감사합니다. ^^

  • 13.05.30 13:58

    좋은 설명 감사 드립니다.
    서비스편을 전체적으로 3번 정도 정독 한것 같습니다.
    쭉~쭉~ 따라가다 보면, 다시 앞에 부분이 이해가 안가서,,, 롤백하고 또 롤백하고,,,
    서비스의 설계 시, 많은 참고가 될 것 같습니다.
    꾸벅!!!!

  • 작성자 13.05.30 14:43

    관심가져 주셔서 감사합니다.
    많은 도움되었으면 좋겠네요. ^^

  • 13.06.01 19:54

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

  • 작성자 13.06.02 16:21

    감사합니다. ^^ 기쁘네요.

  • 13.11.04 15:08

    가끔 성근님이 뭐하시는분이지 궁금하네요ㅋ^^! 정말 도움이 많이 됩니다.화이팅입니다!

  • 작성자 13.11.04 15:33

    기획하시는 분들을 만족시켜드리기 위해
    최대한 짧은 일정에 최고의 퍼포먼스와 안정화를 위해 고민하는
    불쌍한 개발자입니다. T-T
    또한 저 같은 개발자들이 가족과 함께 보내는 시간을
    조금이나마 보탬이 되도록 자료를 공유하는 것이 제 낙이네요. T-T
    아라한님께 도움이 되었다는 큰 낙입니다.

    개발자가 대접받는 그날까지...T-T

  • 13.12.15 23:53

    아 소중한 정보 너무나 감사합니다. IntentService가 구현되어 있는걸 보고 강좌를 다시보니 더욱더 이해가 쉽네요~^^
    이와 관련 질문하나만 할려고하는데요..

    특정 broadcast메세지가 올때마다 startService로 intentService를 호출하는데
    onHandleIntent()의 함수안에서
    해야 될것이 bindService를 호출 후 connected가 호출 되면 asInteface를 통해서 service interface를 가져와서 전달된 intent를 이용해야 되는데요.. onHandleIntent() 안에서 전달된 인텐트를 안정적으로 bind후 connected가 호출된 후에 사용하도록 구현을 할 수 있을까요??

  • 13.12.17 01:50

    자답입니다. 바람직한 것인지 모르겠지만 ServiceConnection class 생성시 전달받은 intent를 담아두었다가 bindService를 통해서 connected 호출이 이루어지면 서비스 인터페이스를 얻어와서 미리 저장해둔 인텐트를 이용하도록 적용하니 문제는 없는거 같네요~

  • 작성자 13.12.17 13:44

    @소울 안녕하세요. 질문을 늦게 보았네요.
    intentService의 onHandleIntent 오버라이드 함수는 별도의 스레드에서 돌아 갑니다.
    그러므로 맘껏 오래걸리는 작업을 하셔도 됩니다.

    제가 제안하자면 onHandleIntent 함수내에서
    약 500ms 정도 sleep하면서 루프를 돌립니다.
    루프문 내에서는 서비스가 바인드 되었는지 계속 확인하고
    바이딩 완료시 루프문을 빠져 나와 맘껏 안전하게 바이더 인터페이스를 사용하시면 되겠네요.
    서비스 connection 시간은 매우 짧습니다.

    이렇게하는 이유는 IntentService의 경우 onHandleIntent 함수가 리턴되고
    다음 처리할 작업이 없다면 서비스를 종료해 버리기 때문입니다.

  • 작성자 13.12.17 13:46

    그러므로 최대한 onHandleIntent 내에서 작업을 끝내야 하기 때문에
    동기화된 코드를 사용하기 위함입니다.

    물론 저 개인적인 생각입니다.

    추신) 바인딩이 끝날때까지 무한정 루프를 도는게 걱정된다면
    예외 처리로 Max 카운트를 두고 그 안에 처리가 안되면 에러처리를 하시면 되겠네요.

    수고하세요.

  • 14.05.08 16:42

    좋은 정보 감사합니다. 매번 볼때마다 느끼는 건데.. 정말 설명을 잘 하시네요.. 출판하셔도 될 것 같습니다.

  • 작성자 14.05.08 23:59

    감사합니다. 더 붐업해서 더 좋은 강좌로 보답하겠습니다.

  • 14.10.22 17:50

    강좌에 너무 감사드립니다. 정말 쏙쏙들어왔습니다. 감사합니다.
    배경지식이 짧다보니, 기본적인 것을 묻는거 같아 망설여지네요. ^^;;

    IntentService 가 기본적으로 Thread로 동작하고, Queue 가 모두 비워지면, Intentservice 가 종료된다는 것이 중요한 것 같습니다. 다름이 아니라 궁금한 부분은 IntentSevice 내에서 다시 Thread 를 돌도록 짠다면, Thread 가 종료되기 전에 Queue 가 비워질 수 있을까요? Thread 를 돌더라도 한 Process 이기 때문에 Thread 가 종료된 시점에서 Queue 가 끝나게 될까요? IntentService 안에서 다시 Thread 로 짜는건;; ^^;; 좀 이상할까요?

  • 작성자 14.10.23 10:18

    안녕하세요.

    네 큐가 모두 비워지면 서비스는 종료됩니다.
    따라서 별도의 작업 스레드를 사용하신다면
    작업 스레드가 도는 중에 서비스가 종료될 수 있겠네요.

    이를 해결하려면
    onHandleIntent 함수내에서 작업스레드를 돌릴 때
    IntentService의 스레드를 잠시 중단해두는 것입니다.
    작업스레드에서 모든 처리를 마친후 노티를 보내고
    IntentService의 스레드를 깨우면 되구요.

    인텐트서비스 자체가 작업스레드이긴 한데
    별도의 작업 스레드를 또 만드셔야 하는 상황이신가 보네요. ^^; 아마도 여러개의 스레드가 필요하신 듯

    수고하세요.

최신목록