본문 바로가기

IT

AsyncTask 사용중 java.lang.ExceptionInInitializerError 처리방법

반응형

 안드로이드에서 AsyncTask 관련 문서를 보면 중요한 내용중에 하나가 분명히 Main Thread 에서 실행되어야 한다는 것입니다.


 그런데 안드로이드 개발을 하다보면 UI스레드를 얻기위해서 항상 Context를 파라메터등으로 넘겨주고 하는 고생(?)을 매번하게 됩니다.


 간단히 Handler를 이용하여 UI스레드를 획득하여 제목에서 보이는 예외를 피하는 코드를 만들어 보겠습니다.


// UI스레드에서 작동됩니다. new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { UserDefineTask task = new UserDefineTask(); task.execute(); } });

 어딜봐도 Context 를 이용하지 않으면서, 간단히 AsyncTask를 UI스레드 단위에서 작동하도록 하는 코드입니다. 안드로이드 Looper.getMainLooper() 에 대한 부분을 살펴보면 application 수준에서의 Main Thread를 반환한다고 되어 있습니다. 그러므로 위에 정의된 Handler는 Main Thread에서 작동하게 되는 것이죠.


 하지만 특별한 경우를 제외하고 위와 같은 코드를 많이 사용하는 것은 그다지 예뻐(?)보이지도 않습니다. 끝.


 

반응형