2010-04-13 57 views
0

我添加文字轉語音到我的應用程序,遵循以下職位的準則:爲我的活動添加了TextToSpeech,現在我的onDestroy不再被調用,bug?

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

想想我應該問這裏是否有其他人看過這個,並找到了解決辦法?

看來,這是導致該問題的意圖,即如下:

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

如果我跳過此意圖,只是繼續前進,創造一個TTS實例,它工作正常。 這個意圖有什麼問題的線索?

回答

1

認爲我已經想出了這一個。 我的問題是,我假設我的活動完成時會調用onDestroy,以便我可以存儲狀態(和首選項等)。我認爲onDestroy總會在創建活動的新實例之前發生,以便onCreate中的新實例可以加載舊實例存儲的狀態。

這通常不成立。它甚至不適用於onStop。

對我來說,解決方案只是簡單地在onPause中保存我想要的內容。似乎我可以指望在創建任何新實例之前調用這個函數。但是因爲在很多情況下我不需要保存onPause,我也檢查isFinishing()。即如果onFinishing()在onPause,然後我保存。

請注意,如果我在singleTop模式下啓動我的活動似乎並不重要,我仍然會得到兩個「活動」實例。一個正在被銷燬的途中(onPause被稱爲,但尚未進入onStop或onDestroy),一個在onCreate中。

無論如何,我希望我現在已經解決了。

0

轉載。 看來,關鍵是你從哪裏調用你的initTTS()方法(或同等方法)。 如果從onCreate()調用它,我還會看到上面的行爲(onDestroy從未調用過)。 由startActivityForResult(其中來自onCreate的調用是一個特例)的文檔暗示,我試圖通過延遲的消息調用意圖到我自己的Handler。

現在,onDestroy再次被調用!

(也對您的bug報告發表了評論)

相關問題