안녕하세요?
안드로이드 입문자 입니다.
다름이 아니라 while문을 돌릴시 ANR을 방지 할수 있는 방법이 없나 몰라서 문의 드립니다.
상황은 특정 SMS를 캐치해서 처리해야 하는 부분인데...
브로드캐스트 리시버를 통해 SMS를 수신 받아 처리 하고 있습니다.
브로드 캐스트 리시버에서 문자열을 검색하여 해당 문자일 경우 서버와 통신 하게 되는데
이때 서버에서 응답이 올때까지 기다리는 처리를 해줘야 합니다.
이때 while문을 돌리면 서버에서 응답이 5초 이내 오지 않으면 간혹 ANR이 걸리는 데 이를 방지 할수 있는지 궁금합니다.
(Thread를 쓰는 방법이 있지만 Thread를 쓰게 되면 해당 함수가 끝난후 clearAbortBroadcast가 발생하여 해당 SMS메세지를 다시 정상적으로
넘겨주지 못합니다. 따라서 해당 함수 내(onReceiver)에서 결과 값을 받을 때 까지 (물론 타임 아웃 처리는 해 놓았습니다.) 함수를 종료시키지 말아야 합니다
현재 의사 코드는 아래와 같습니다. (일단 타임아웃등의 처리가 빠진 의사 코드 입니다.)
while (!중지 플래그 값) { if (중지 플래그 값) break;
Thread.yield(); Thread.sleep(100); Thread.yield(); } |
Thread.yield()를 쓰면 ANR이 안날 줄 알았는데 그래도 나더군요..
ANR을 방지 하기 위해서 어떤 방법이 좋을지 궁금합니다.
P.S 중지 플래그 값은 서버로부터 데이터를 받아오는 쓰레드에서 변경 해주게 되어 있습니다.