0

次の投稿のガイドラインに従って、TextToSpeechをアプリに追加しました。

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-instanceを作成すると、正常に機能します。この意図の何が悪いのかについての手がかりはありますか?

4

2 に答える 2

1

私はこれを理解したと思います。私の問題は、アクティビティが終了したときにonDestroyが呼び出され、状態(および設定など)を保存できると想定していたことです。また、onDestroyは、アクティビティの新しいインスタンスが作成される前に常に発生するため、onCreateの新しいインスタンスは、古いインスタンスによって保存された状態をロードできると想定しました。

これは一般的には当てはまりません。onStopには当てはまりません。

私にとっての解決策は、単にonPauseに必要なものを保存することでした。新しいインスタンスを作成する前に、これが呼び出されることを期待できるようです。ただし、保存する必要がない場合はonPauseが呼び出されることが多いため、isFinishing()も確認します。つまり、onPauseのisFinishing()の場合、保存します。

アクティビティをsingleTopモードで起動したかどうかは問題ではないようですが、それでも2つの「生きている」インスタンスを取得することに注意してください。破棄される途中の1つ(onPauseが呼び出されましたが、まだonStopまたはonDestroyに入っていません)とonCreateにある1つ。

とにかく、私は今それを解決したと思います。

于 2010-04-16T18:06:42.540 に答える
0

再現。キーは、initTTS()メソッド(または同等のもの)を呼び出す場所であるようです。onCreate()から呼び出された場合、上記の動作も表示されます(onDestroyは呼び出されません)。startActivityForResultのドキュメント(onCreateからの呼び出しは特殊なケースです)にヒントを得て、自分のハンドラーへの遅延メッセージを介してインテントを呼び出してみました。

これで、onDestroyが再び呼び出されます。

(バグレポートにもコメントしました)

于 2010-11-01T08:45:43.840 に答える