保持 JobIntentService 运行,其中包含异步任务



我想在我的应用程序中开发文本到语音转换(TTS(功能。它必须在Service内部实现,因为用户可能会Activity留下"详细信息"并返回"主要"Activity甚至离开我的应用程序,并且它仍然应该大声说出文本。由于奥利奥为服务引入了一些后台限制,我必须支持 4.0+,我必须使用JobIntentService

问题是 TTS 具有异步实现,JobIntentService在完成其工作后onHandleWork被杀死,即使我使用startForeground(在我的代码showSpeakingNotification中(

有趣的是,当我在"speakOut"方法之后onHandleWork内部有一个断点或只是取消注释时Thread.sleep服务正在工作并读取我的文本(并且存在前台通知(。

问题是如何在实际运行时防止我的服务"自动终止",但在内部使用异步功能?

@Override
protected void onHandleWork(@NonNull Intent intent) {
if (ACTION_SPEAK.equals(intent.getAction()) && intent.hasExtra(EXTRA_TEXT_ARRAY)) {
ArrayList<String> textArr = intent.getStringArrayListExtra(EXTRA_TEXT_ARRAY);
showSpeakingNotification(textArr.get(0));
if (ttsInitialized)
speakOut(textArr);
else if (ttsInitListener != null)
ttsInitListener.setPendingText(textArr);
} else if (ACTION_STOP_SPEAKING.equals(intent.getAction())) {
if (ttsInitialized && tts.isSpeaking())
tts.stop();
}
try {
//Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}

只需取消注释 Thread.sleep 服务正在工作并阅读我的文本

当您添加Thread.sleep(10000);时,它会因此阻止当前线程,它不会响应您的语音。当您评论它时,当前线程可以自由读取您的数据

问题是当服务"自动终止"时

,如何防止"自动终止"我的服务 实际运行,但在内部使用异步功能?

注意可能。可以使用前台服务满足您的要求。请参阅此 SO 以实现前台服务

相关内容

  • 没有找到相关文章

最新更新