안드로이드 개발 질문/답변
(글 수 45,052)
분명 서비스는 백그라운드에서 동작하는 거라고 알고 있는데
백그라운드에서 서버에 접근하려고 할 때 응답이 없으니까
메인 스레드를 모두 멈추고 그 응답만 기다리는 겁니다;;;
그러니까... 어플을 실행하면서 서비스도 동시에 실행하여 서버에 접속하여 동작하게끔 구현했는데
서비스에서 접속하는 서버가 응답이 없어서 접속하지 못 하더라도
본래의 어플 서비스는 진행이 되어야 하는데...
모든걸 멈추고 서비스에서 그 응답만 기다리고 있는데...
원래 서비스가 이런 건가요...?
아니면 제가 뭘 잘 못해서 서비스가 메인 스레드를 차지하고 동작하는 건가요? ㅠ_ㅠ
제 질문도 애매모호 하기에... 답변도 정확하지 않아도 힌트라도 마구 떤져 주세요 ㅠ
2011.10.06 16:59:03
먼저 답변 너무 감사합니다.
그렇다면 작업 소요가 걸릴것 같은 처리부는 따로 모아 스레드를 생성해서 처리해야 한다는 건가요...?
예전에도 한 번 시도를 해봤었는데 서비스에서 무거운 작업이 메인 스레드에 영향을 미치는 것 같아서
서비스 내에서 스레드를 생성하여 처리를 해 보았는데 looper 에러가 나면서 안 되더라구요...
그래서 어찌어찌 해서 돌려 봤는데 생성한 스레드와 서비스 내에 다른 처리부와 동기화가 안 되서
막... 꼬여서 다른 문제가 야기되기도 하고...
별도의 클래스를 생성해야 하는건가요...?




일단 모든 서비스에 대한 요청은 기본적으로 blocking 형태를 가지고 있습니다.
한마디로 장승제님이 겪으신 대로 움직인다는 거죠.
만약 뭔가 실행 시키고 비동기적으로 움직이고 싶으시다면
서비스가 그런 형태에 대한 준비가 되어있어야 합니다.
(서비스에 요청을 던지면 큐에만 넣고 리턴바로 해버리고,
별도의 스레드가 큐의 내용을 빼서 뭔가 수행한 다음에 완료 콜백을 수행하는 방식...)
심지어 프로세스가 분리된다고 하더라도 (서비스가 다른 pid를 갖는다고 하더라도)
서비스에 대한 요청은 blocking형태로 처리됩니다.
(transact 메소드를 어떻게 하면 비동기로 할수 있다고 하긴 하던데... 그것까진 잘 모르겠네요.)