targetSdkVersion 26 dando exceção nos relatórios de falha

De acordo com o requisito para atualizar a versão do SDK direcionado para 26 até novembro de 2018, tentei atualizar meu arquivo gradle há alguns meses e lancei uma nova versão do meu aplicativo,depois de atualizar as versões sdk de destino e compilar sdk para 26 (de 23). Dentro de um dia, comecei a observar falhas no meu aplicativo no console do Firebase. O motivo foi que eu estava usando o serviço TTS no meu aplicativo e, ao direcionar para a versão 26, parece que ele precisava de uma nova implementação para o serviço TTS, devido à exceção fatal em tempo de execução. Então, reverti a versão do SDK de destino para 23 e compilei a versão do sdk para 23.

Caused by java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.a.b.c/services.TTSService }: app is in background

Esta exceção foi vistasó para os dispositivos no Android OS 8.0 e 8.1.

Então, há um mês, comprei um novo dispositivo que está no Android 8.0 (Motorola G6 Plus), na esperança de reproduzir consistentemente esse erro.Mas isso nunca aconteceu neste dispositivo, mesmo que meu aplicativo tenha como alvo a versão 26, mesmo quando eu formei com força o serviço TTS através do meu aplicativo. Então, estou confuso sobre como proceder.

A solução para esta exceção é explicadaaqui.

Meu código atual para implementar e chamar o serviço TTS é o seguinte:

MainActivity oncreate método:

 if(!isMyServiceRunning(TTSService.class))//Start a service instance only if service is currently not running
        startService(new Intent(MainActivity.this, TTSService.class));

TTSService.java:

package services;

import android.app.Service;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;  
import android.os.Environment;
import android.os.IBinder;
import android.speech.tts.TextToSpeech;
import android.support.annotation.Nullable;
import android.util.Log;
import android.widget.Toast;

import com.google.firebase.crash.FirebaseCrash;

import constants.ConstantParams;

public class TTSService extends Service {

private static TextToSpeech voice =null;

public static TextToSpeech getVoice() {
    return voice;
}

@Nullable
@Override

public IBinder onBind(Intent intent) {
    // not supporting binding
    return null;
}

public TTSService() {
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {

    try{
            voice = new TextToSpeech(TTSService.this, new TextToSpeech.OnInitListener() {
                @Override
                public void onInit(final int status) {


                }
            });
    }
    catch(Exception e){
        e.printStackTrace();
        FirebaseCrash.report(new Exception("Error in initializing TTS object"));
        FirebaseCrash.log("Error in initializing TTS object");
    }


    return Service.START_STICKY;
}

@Override
public void onDestroy() {
    clearTtsEngine();
    super.onDestroy();

}

public static void clearTtsEngine()
{
    if(voice!=null)
    {
        voice.stop();
        voice.shutdown();
        voice = null;
    }
}

}

Preciso reimplementar esse recurso de acordo com a solução mencionada acima? Ou posso recorrer a uma abordagem mais simples de segmentar o SDK da versão 26, mas mantendo a versão do SDK de compilação em 23 (é o estado atual no meu aplicativo)? Quaisquer outras soluções seriam apreciadas.

questionAnswers(4)

yourAnswerToTheQuestion