본문 바로가기

ANDROID/Debug Logs

[안드로이드] handler 내부에서 Thread 사용시 앱 freezing 발생

개발을 하던 중에 특정 조건이 성립 되었을 때 handler로 메세지를 보내


handleMessage 함수 내에 선언된 Thread를 돌리게 하였다.



헌데 이후에 조건을 충족하고 Thread가 시작되고 나면 


지정한 다른 동작들도 먹통이 되고, 전체적으로 앱이 freeze되는 현상이 생겼다.



처음엔 단순히 layout에 접근 못하거나 제어 못하는 것 때문에 생기는 것으로 생각했는데


돌고 돌아 handler 의 handleMessage 함수 안의 Thread 때문인 것을 확인했다.



private void handleMessage(Message msg) {
switch (msg.what){


case START_WRITE :


// Thread 부분

break;
}
}


handler의 handleMessage는 대략 이런 구조였는데, 아마 switch 조건문 방식때문에 일어난 일이 아닐까 싶다.


그러니까 handler로 메세지를 보내면 받은 메세지를 handleMessage에서 다루게 되는데



여기서 switch 문으로 선언된 경우 Thread가 죽거나 끝나야만 break 부분까지 닿을 수 있기 때문에

(handleMessage가 비로소 끝나기 때문에)


Thread가 계속 살아있는 한 handleMessage가 영영 끝나지 않고 돌아가면서


앱 전체를 에러없이 먹통으로 만들기까지 되는 것이다.



지금은 단순히 Thread를 handler 말고 다른 곳에서 돌아가게끔 해두었는데


handler에서 Thread를 관리하고 싶다면 무한루프에 빠지지 않게만 설계하면


쓰는데 지장이 없을거란 생각도 든다.