连续语音识别意外停止

时间:2015-05-27 12:35:25

标签: android speech-recognition

我已在我的应用程序中实现了Android Speech Recognition as a service on Android 4.1 & 4.2识别解决方案,并进行了一些小修改(例如:1500ms倒计时,静音哔声),这基本上很好。

我想将这项服务运行数小时。我测试了很多这个解决方案,我经历了意想不到的停顿 识别在后台运行,显示通知图标,表示识别服务何时开启。经过10-15分钟的连续监听,没有任何例外,整个应用程序停止。 (但是在经过8个识别期后,也就是在30秒后发生了。)当它发生时,我能够追踪一件事情,再一次线程进入扩展的Application类'onCreate()方法,其中日志打印出来,但没有其他工作。无法删除显示的通知。

我在侦听期间没有与泄漏相关的异常或任何可疑的日志消息。 有人经历过类似的停留吗?有人知道为什么会这样吗?

我尝试在每20个(处理程序)启动后重新启动服务以避免此行为,因此该服务未运行那么长时间。但情况是一样的。

如果您有任何建议可以在几个小时内运行该服务,请分享。

1 个答案:

答案 0 :(得分:2)

在阅读下面的修补程序之前,请注意

保持服务很长时间并且不允许系统杀死是一个坏主意。手机电池电量有限,即使处于睡眠模式,服务也会运行。

Android将基于内存状态杀死不同的服务,因此在具有更多内存的设备上可能无法停止。但是,让它不要停止你需要告诉操作系统您的服务很重要,并引用Android参考,它不会被杀死而没有太大的伤害"。要告诉系统您的服务何时可以被杀死,何时无法使用,请查看下面介绍的startForegroundstopForeground方法。

启动前景
它使服务在前台运行,使系统更愿意杀死除您之外的其他服务以释放内存。 ,即使您使用此方法,也无法保证您的服务不会停止。如果手机内存非常低,可能会停止。另外:

  

您可以设置此标记,如果终止您的服务会对用户造成干扰,例如您的服务正在播放背景音乐,那么用户会注意到他们的音乐是否停止播放。

停止前景

  

从前台状态中删除此服务,如果需要更多内存,则允许将其终止。

指向文档的链接:
Start Foreground method
Stop Foreground method