gpt4 book ai didi

android - 保持 JobIntentService 在内部运行异步任务

转载 作者:行者123 更新时间:2023-11-29 23:52:29 25 4
gpt4 key购买 nike

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

问题是 TTS 有异步实现并且 JobIntentServiceonHandleWork 完成它的工作后被杀死,即使我使用 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();
}
}

最佳答案

just uncomment Thread.sleep service is working and reading my text

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

Question is how to prevent "auto-killing" my service when it is actually running, but using asynchronous feature inside?

注意可能。您的要求可以使用前台服务来满足。引用这个SO用于实现前台服务

关于android - 保持 JobIntentService 在内部运行异步任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50736158/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com