2011-02-11 3 views
0

웹에서 무언가를 가져 와서 onPostExecute (...)에서 Activity.showDialog를 호출하는 AsyncTask가 있습니다. AyncTask는이 상황에서 정확히 어떻게 동작합니까?

  1. 내가 다시 활동에 활동 B에
  2. 이동 AsyncTask를 시작하면 정확히
  3. AsyncTask를 그것 (doInBackground()가 반환)

작업의 완료 어떻게됩니까? onPostExecute()가 호출 되었습니까?

답변

0

내 활동이 끝났음에도 불구하고 AsyncTask에 아무런 영향이 없다는 것을 알았습니다. 내 onPostExecute()에 showDialog() 호출이 있습니다. 사용자가 BACK 키를 누르면 활동이 종료되고 onPostExecute()가 호출됩니다.

+0

작업 할 수있는 컨텍스트/활동이 여전히있는 경우 대화 상자를 만들기 전에 항상 확인해야합니다. – WarrenFaith

+0

예 ...이 패턴을 사용하고 있습니다 - http://stackoverflow.com/questions/3821423/background-task-progress-dialog-orientation-change-is-there-any-100-working/3821998#3821998. 이 버그를 수정하려면 약간 수정해야 할 것입니다. 지금은 onRetainNonConfigurationInstance()에서 AsyncTask에서 내 Activity를 분리하려고합니다. 분리 문제를 onDestroy()로 옮겨서 문제를 해결할 것입니다. – fhucho

3

AsyncTask의 구현 방법에 따라 AsyncTask가 완료 될 때까지 활동 B가 누출 될 수 있습니다. Activity B가 파괴되면 AsyncTask를 취소하는 것이 이상적입니다.

+0

내 AsyncTask는 정적 클래스이며, Activity에 대한 참조는 setActivity() 메소드로 설정됩니다. onRetainNonConfigurationInstance()에서 AsyncTask를 반환하고 방향 변경 후 getLastNonConfigurationInstance() 및 setActivity()를 호출하여 AsyncTask를 검색합니다. 안드로이드 마켓에서 WindowManager.BadTokenException 보고서를 볼 수 있는데, AsyncTask를 사용하는 방법으로 인해 발생할 수 있습니까? – fhucho

+0

@fhucho : 아마도. doInBackground()에서'Activity'를 안전하게 참조 할 수 없습니다. 이를 피하고 새로운 액티비티 인스턴스의'onCreate()'에서'setActivity()'를 다시 호출한다면 이론적으로 안전해야합니다. Leastways는 언젠가 전에 'android-developers'그룹에서 Hackborn 선생님과 교환 한 순수한 결과였습니다. – CommonsWare

+0

@CommonsWare 여기에 설명 된 패턴을 사용하고 있습니다. http://stackoverflow.com/questions/3821423/background-task-progress-dialog-orientation-change-is-there-any-100-working/3821998#3821998 (내 의견을 참조하십시오). 그러나 나는 문제가 될 수있는 활동을 분리하지 않는다는 것을 알았다. – fhucho

관련 문제