티스토리 뷰


ANR 오류, 시도 때도 없이 나온다.

ANR오류가 발생하는 이유?

안드로이드는 태생부터, 응답시간을 초과하면 스레드가 중지된다.

문제는, Activity에서 응답시간을 초과하면 그나마 다이얼로그 창이 나오면서 표시라도 해준다.

하지만, 다른 클래스에서 응답 시간이 초과되면, 그냥 조용히, 프로그램이 종료되게 된다.

이 문제에 대해서 한참 고생해서 해결법을 올려본다.

일단 Thread로는 해결이 불가능하다.

Thread 처리로 하면 이론상으로는 백그라운드에서 실행하게 되지만, 종료 시점이 맞물리게 되면서 추가적인 문제가 발생할 가능성이 많고, 잠재적인 오류를 가지고 있다.

그래서 AsyncTask클래스를 이용해야 하는데, 문제는 AsyncTask도 Activity를 상속하지 않으면 사용할 수 없다는 점이다.

이 문제를 해결하기 위해, AsyncTask와 Handler를 적절히 조합해서 사용하면된다.

// 핸들로 메세지를 생성하기 위해 메세지 생성을 호출한다.
Message msg = testActivity.mHandler.obtainMessage();
msg.what = test.MSG_GAME_CREATE;
testActivity.mHandler.sendMessage(msg);


이 핸들러 메세지를 통해 Activity를 상속받은 클래스로 메세지를 보내고, Activity에서는 
 private void createGameLayer() {
    new AsyncTask<Void, Void, Void>() {

      @Override
      protected Void doInBackground(Void... params) {
       mTestLayer = new testLayer(testActivity.this);
       return null;
      }
     
      @Override
      protected void onPostExecute(Void result) {
       super.onPostExecute(result);
       //백그라운드 작업이 끝난후 해줄 작업
      }
     }.execute();

 } 

로 처리하게 되면, 아주 부드럽게 작동이 된다.

까먹을 까봐 포스팅~
댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크