targetSdkVersion 26 dando excepciones en informes de fallas

Según el requisito de actualizar la versión de SDK dirigida a 26 para noviembre de 2018, intenté actualizar mi archivo gradle hace unos meses y lancé una nueva versión de mi aplicación, después de actualizar las versiones de sdk objetivo y compilar sdk a 26 (de 23). En un día, comencé a observar fallas en mi aplicación en mi consola Firebase. La razón era que estaba usando el servicio TTS en mi aplicación, y cuando apuntaba a la versión 26, parece que requería una nueva implementación para el servicio TTS, debido a la excepción fatal en tiempo de ejecución. Así que revertí la versión de destino del SDK a 23 y compilé la versión de SDK a 23.

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

Esta excepción se viosolament para los dispositivos con sistema operativo Android 8.0 y 8.1.

ace un mes, compré un nuevo dispositivo con Android 8.0 (Motorola G6 Plus), con la esperanza de reproducir este error de manera consistente. @Pero nunca sucedió en este dispositivo, a pesar de que mi aplicación estaba dirigida a la versión 26, incluso cuando activé forzosamente el servicio TTS a través de mi aplicación. Por lo tanto, estoy confundido sobre cómo proceder.

La solución para esta excepción se explicaaqu.

Mi código actual para implementar y llamar al servicio TTS es el siguiente:

Método de creación de actividad principal:

 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;
    }
}

}

¿Tengo que volver a implementar esta característica según la solución mencionada anteriormente? ¿O puedo recurrir a un enfoque más simple de apuntar a la versión 26 SDK, pero retener la versión de compilación SDK en 23 (es el estado actual en mi aplicación)? Cualquier otra solución sería apreciada.

Respuestas a la pregunta(4)

Su respuesta a la pregunta