[android] Activity idle timeout for HistoryRecord 에러 발생 시

SurfaceView를 상속한 뷰 클래스를 하나 만들어 액티비티를 띄울 경우 아래와 같은 에러가 발생하면서
뷰가 표시되지 않고, 까만 화면만 표시되다 에러가 발생하는 경우

WARN/ActivityManager(374): Launch timeout has expired, giving up wake lock!
WARN/ActivityManager(374): Activity idle timeout for HistoryRecord{4776baf0 com.isulnara.game/.GameMain}

◆ 원인

-> SurfaceView를 상속한 뷰 내부의 쓰레드(Thread)에서 LOCK이 걸려서 발생함.

SurfaceView를 상속한 뷰 내부의 코드 중 아래처럼 synchronized를 사용하고

synchronized (holder)
{

}

액티비티 또는 쓰레드 내부에서 동시에 synchronized를 사용한 특정 메소드에 접근할 경우
LOCK이 걸려서 무한대기하다 에러를 발생시키는 것으로 확인했음..

◆ 해결방법

1. LOCK 발생 시키는 상황을 만들지 않도록 코딩
2. 동기화가 필요없을 경우 synchronized 블럭 제거

댓글 남기기

Close Menu
%d 블로거가 이것을 좋아합니다: