[android] Activity idle timeout for HistoryRecord 에러 발생 시
Posted on 2011/04/29 01:38
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 블럭 제거