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 实例,它就可以正常工作。关于这个意图有什么问题的任何线索?

4

2 回答 2

1

我想我已经想通了。我的问题是我假设我的活动完成时会调用 onDestroy,以便我可以存储状态(和偏好等)。而且我假设 onDestroy 总是在创建活动的新实例之前发生,因此 onCreate 中的新实例可以加载旧实例存储的状态。

这一般不成立。它甚至不适用于 onStop。

我的解决方案只是将我想要的内容保存在 onPause 中。看来我可以指望在创建任何新实例之前调用这个。但是由于在许多不需要保存的情况下都会调用 onPause,因此我还检查了 isFinishing()。即如果isFinishing() 在onPause 中,那么我保存。

请注意,如果我在 singleTop 模式下启动我的活动似乎并不重要,我仍然会得到两个“活动”实例。一个正在被销毁(onPause 被调用但尚未进入 onStop 或 onDestroy)和一个在 onCreate 中。

无论如何,我希望我现在已经解决了。

于 2010-04-16T18:06:42.540 回答
0

转载。看来关键是您从哪里调用 initTTS() 方法(或等效方法)。如果从 onCreate() 调用它,我还会看到上面的行为(从未调用过 onDestroy)。由 startActivityForResult 的文档提示(从 onCreate 调用是一种特殊情况),我尝试通过延迟消息向我自己的处理程序调用意图。

现在,再次调用 onDestroy!

(也在您的错误报告中对此进行了评论)

于 2010-11-01T08:45:43.840 回答