2010-04-13 2 views
0

나는 다음 포스트에있는 지침에 따라, 내 응용 프로그램에 TextToSpeech를 추가하지 : 뒤로 버튼을 누를 때님이 TextToSpeech를 내 활동에 추가했으며 이제는 내 onDestroy가 더 이상 불리지 않습니다, 버그?

http://android-developers.blogspot.com/2009/09/introduction-to-text-to-speech-in.html

와 지금 내들의 OnDestroy 더 이상이라고합니다. 나는 이것에 관한 버그 보고서를 제출했다 : http://code.google.com/p/android/issues/detail?id=7674

피규어 다른 누군가가 이것을 보았고 해결 방법을 찾았습니까? 나는이 의도를 건너 뛰고 바로 가서하고 TTS 인스턴스를 만들 경우

Intent checkIntent = new Intent(); 
checkIntent.setAction(TextToSpeech.Engine.ACTION_CHECK_TTS_DATA); 
startActivityForResult(checkIntent, MY_DATA_CHECK_CODE); 

, 그것은 잘 작동 :

즉, 다음과 같은 문제를 일으키는 의도 인 것으로 보인다. 이 의도와 관련하여 잘못된 점에 대한 단서가 있습니까?

답변

1

생각해 보았습니다. 내 문제는 내 활동이 끝날 때 onDestroy가 호출되어 상태 (및 환경 설정 등)를 저장할 수 있다고 가정한다는 것입니다. 그리고 onDestroy는 새로운 활동 인스턴스가 생성되기 전에 항상 발생하므로 onCreate의 새 인스턴스가 이전 인스턴스에 저장된 상태를로드 할 수 있다고 가정했습니다.

이것은 일반적으로 적용되지 않습니다. 그것은 심지어 onStop에 대해서는 사실이 아닙니다.

나를위한 해결책은 단순히 내가 원하는 것을 onPause에 저장하는 것이 었습니다. 새로운 인스턴스를 생성하기 전에이 인스턴스를 호출 할 것으로 예상됩니다. 하지만 onPause는 저장하지 않아도되는 경우가 많기 때문에 isFinishing()도 확인합니다. 나는. onPause에서 isFinishing()을 수행하면 저장됩니다.

싱글 톱 모드로 내 활동을 시작해도 문제가되지 않는다는 것을 유의하십시오. 여전히 "살아있는"인스턴스가 두 개 있습니다. 파괴되기까지가는 중이었던 (onPause가 호출되었지만 onStop 또는 onDestroy에 아직 입력하지 않았습니다) 및 onCreate에 있던 하나입니다.

어쨌든 지금은 해결해줬으면합니다.

0

재현. 키는 initTTS() 메서드 (또는 이와 동등한 메서드)를 호출하는 곳입니다. onCreate()에서 호출하면 위의 동작 (onDestroy 절대로 호출되지 않음)도 표시됩니다. doc에서 startActivityForResult (onCreate에서 호출하는 것이 특별한 경우)를 암시하며, 지연된 메시지를 통해 Intent를 내 자신의 Handler에 호출하려고했습니다.

이제는 onDestroy가 다시 호출됩니다!

(버그 보고서에도이 내용이 코멘트 됨)

관련 문제