AsyncTask 사용 시 에러가 났을경우
리스트에 바인딩 할 객체를 불러 올 때 AsyncTask를 썼다.
그런데 번번이 ‘sending message to a Handler on a dead thread’ 라는 메시지를
내뱉고는 죽는 것이었다. 다행히 나만 이런 문제가 있는 건 아니었다.
http://code.google.com/p/android/issues/detail?id=20915
AsyncTask의 필드를 보면 static으로 InternalHandler를 생성하는 부분이 있는데, (InternalHandler는 끝날 때나 ProgressUpdate할 때 쓰인다) 이게 꼭 UI thread에서 생성이 되야된다더라. API에도 비슷한 부분이 있긴 한데… ‘The task instance must be created on the UI thread’. 생각해보니 InternalHandler는 한번 생성하고 땡! 이 아니라 여러 객체에서 쓰인다.
해결법은 간단하다. UI thread에서 AsyncTask를 한번 만져주면 된다.
다음 코드를 onCreate 쯤에서 불러주면 적절할 듯하다.
Class.forName("android.os.AsyncTask");