使用异步任务保持JobIntentService运行

时间:2018-06-07 08:15:37

标签: android android-service text-to-speech jobintentservice

我想在我的应用中开发文字转语音(TTS)功能。它必须在Service内实施,因为用户可能会留下"详细信息" Activity并回到" main" Activity或者甚至离开我的应用,它仍然应该大声说出来。由于Oreo为服务引入了一些背景限制,我必须支持4.0+,我必须使用JobIntentService

问题是,即使我使用JobIntentService(在我的代码onHandleWork中),TTS也有异步实现而startForegroundshowSpeakingNotification完成工作后被杀死

有趣的是,当我在onHandleWork之后的一个断点之后,就说出了#Out'方法或只是取消注释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();
    }
}

1 个答案:

答案 0 :(得分:1)

  

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

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

  

问题是如何防止&#34;自动查杀&#34;我的服务   实际上正在运行,但在内部使用异步功能?

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