IT_Programming/Android_Java

[펌] AsyncTask와 Activity or Fragment

JJun ™ 2014. 3. 25. 14:53


 출처: http://dhjin.egloos.com/viewer/2527621


 

 

백그라운드 작업을 구현하기 위해 Thread를 쓰거나 AsyncTask를 사용하는데
아무래도 AsyncTask가 사용하기는 편하다.

둘은 시스템 적으로도 차이가 있다고 하니.. 관련 자료를 공부하는 것도 좋을 듯
어쨌뜬 AsyncTask를 사용해 HttpPost를 하고 있는데 문제는 호출한 Activity나 Fragment가

종료 되어도 AsyncTask는 살아 있다는거!!!

이는 여러 문제점을 일으킬 수 있는데, 그 예로

 

 Http Request  -> Activity 전환 -> Http Response -> Activity 변경 시도 == Exception!!!!

 

이런 문제들이 발생하게 된다.

구글링을 해 보면 몇 가지 해결책이 제시되는데 복잡한걸 싫어하므로
아래와 같이 해결~! 당연히 httpReceiver는 interface
물론 입맛에 따라 http통신 등은 그냥 프로그래스 보여주고 블럭시켜도 뭐....

 

@Override
protected void onPostExecute(Boolean bOnline) {

    if( httpReceiver instanceof Fragment ) {
        
        if( ((Fragment)httpReceiver).isDetached() ) {

            return;
        }
    }
    else if( httpReceiver instanceof Activity ) {

        if( ((Activity)httpReceiver).isFinishing() ) {

            return;
        }
    }

    if( bOnline )
        httpReceiver.onResponseComplete(....);
    else
        httpReceiver.onHTTPFailure(...);
}