2013-05-02 6 views
2

나는이 질문이 여러 번 논의 된 것을 알고있다. herehere.방향/구성 변경 중에 실행중인 AsyncTask를 처리하는 방법은 무엇입니까?

그러나 대부분의 솔루션은 제안되거나 권장되지 않기 때문에 여전히 문제가 해결되지 않았습니다.

나는 TextView 텍스트를 연속적으로 업데이트하는 AsyncTask이 있습니다. 작업 실행은 토글 버튼 클릭으로 시작됩니다. 처음에는 AsyncTask을 주 활동의 내부 클래스로 사용했습니다. 그러나 나중에 그것을 외부 수업으로 바 꾸었습니다.

오리엔테이션 변경 중에 textview 값을 저장하고 복원하려면 onSaveInstanceState()onRestoreInstanceState() 메서드를 사용하고 있습니다. 내가 달성 할 수없는 것은 오리엔테이션 이후에 단추 상태를 복원하고 AsyncTask을 다시 시작하는 방법입니까?

답변

1

이 페이지에 따르면의 응용 프로그램에서 API 레벨 13 이상을 목표로하는 경우 방법으로 화면 회전을 파악하려면 android:configChanges="orientation|screenSize"을 사용해야합니다.

이렇게하면 및 onResume 메서드가 호출되지 않으므로 TextView는 그 값을 유지합니다. 그리고 내 마음 속에서 AsyncTask를 멈추지 않을 것입니다. 그렇다면 onConfigurationChanged 방법으로 다시 시도하십시오.

0

단추 상태를 onSaveInstanceState(...)의 번들에 저장하고 onCreate(...) 동안 복원하면 버튼 상태에 따라 AsyncTask가 재개되지 않는 이유는 무엇입니까? 참고로, 내 경험에 따르면, 이것은 보통 onRestoreInstanceState()이 아니라 오리엔테이션 변경 후에 호출되는 onCreate (..)입니다.

2
  1. 클래스는 항상 사용할 수 있으며 거기에 정적 변수로 저장합니다.

  2. 더미 조각을 setRetainInstance(true)으로 활동에 추가하고이를 사용하여 AsyncTasks를 저장하고 실행하십시오. 순환 게재시 자동 첨부되며 태그별로 활동을 다시 찾을 수 있습니다.

  3. 서비스를 사용하여 백그라운드 작업을 실행하면 백그라운드 서비스가 순환 다시 시작의 영향을받지 않으므로 Activity가 다시 바인딩 할 수 있습니다.

+2

'Context'가 관련된 정적 인스턴스를 도입하는 것은 좋지 않습니다. 메모리 누수가 발생하기 쉽습니다. – waqaslam

+0

@Waqas Nope. 응용 프로그램 클래스는 사실상 이미 싱글 톤이며 마지막으로 삭제됩니다. –

+1

정적 인 AsyncTask에서 활동 컨텍스트가 참조되는 경우는 무엇입니까? – waqaslam

관련 문제