我按照以下帖子中的指南将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,它就可以了。 这个意图有什么问题的线索?
答案 0 :(得分:1)
想想我已经把它想出来了。 我的问题是我假设当我的活动结束时会调用onDestroy,这样我就可以存储状态(和首选项等)。我假设onDestroy总是在创建活动的新实例之前发生,因此onCreate中的新实例可以加载旧实例存储的状态。
这一般不成立。它甚至不适用于onStop。
我的解决方案就是在onPause中保存我想要的东西。在创建任何新实例之前,我似乎可以指望这个被调用。但是因为onPause在我不需要保存的许多情况下被调用,所以我也检查了isFinishing()。即如果isPinishing()在onPause中,那么我保存。
请注意,如果我在singleTop模式下启动我的活动似乎并不重要,我仍然会得到两个“活着”的实例。一个正在被摧毁的路上(onPause被调用但尚未进入onStop或onDestroy)和一个在onCreate中。
无论如何,我希望我现在已经解决了。
答案 1 :(得分:0)
再现。 似乎键是从中调用initTTS()方法(或等效方法)的位置。 如果从onCreate()调用它,我也会看到上面的行为(onDestroy从不调用)。 由startActivityForResult的文档暗示(从onCreate调用是一个特例),我尝试通过延迟消息调用intent到我自己的Handler。
现在,再次调用onDestroy!
(也在您的错误报告中对此进行了评论)