Согласно последним изменениям, произошедшим в версии Android Oreo и выше, Службам больше не разрешается работать в фоновом режиме. Вам придется обратиться к службе переднего плана, если вы хотите запустить службу, когда приложение не запущено. Означает ли это также, что START_STICKY больше не будет работать?
Я попробовал следующий код
public class MyService extends Service {
private static final String TAG = "MyService";
@Override
public void onCreate() {
super.onCreate();
Log.d(TAG, "onCreate: ");
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d(TAG, "onStartCommand: ");
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
Log.d(TAG, "input : " + i);
SystemClock.sleep(1000);
}
}
}).start();
Log.d(TAG, "onStartCommand: returning START STICKY");
return START_STICKY;
}
@Override
public void onDestroy() {
Log.d(TAG, "onDestroy: ");
super.onDestroy();
}
}
Это простой сервис, который создает поток внутри и печатает числа.
Я запускаю эту службу (на устройстве ниже Oreo), и как только служба начинает печатать числа, я закрываю приложение. Теперь я вижу, что служба перезапускается через пару секунд, что ожидается.
Теперь я запускаю тот же код на устройстве Oreo. Но там также, после принудительного выхода из приложения, сервис перезапускается так же, как на устройствах ниже Oreo. Итак, означает ли это, что START_STICKY перезапустит службу, и все равно она будет выполняться беззвучно даже в Orero? Ограничение только для запуска нового Сервиса из фона?