Oreo: startService () не вызывает IllegalStateException при вызове в фоновом режиме - PullRequest
0 голосов
/ 13 сентября 2018

В соответствии с ограничениями фонового выполнения , введенными в Android Oreo, вызов startService , когда приложение работает в фоновом режиме, должно выдавать IllegalArgumentException. Проверьте этот вопрос: Android 8.0: java.lang.IllegalStateException: не разрешено запускать службу. Намерение .

Я создал образец приложения для Android Oreo, который выполняет следующие действия:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            startService(new Intent(MainActivity.this, MyService.class));
        }
    }, 5000);
}

Затем я запускаю приложение и после нажатия кнопки «Домой» немедленно переводю приложение в фоновое состояние. Но исключение не брошено. Как это может быть? В этом случае я ожидаю сбоя приложения.

1 Ответ

0 голосов
/ 17 октября 2018

Согласно документации Google по ограничениям фонового обслуживания :

Пока приложение находится на переднем плане, оно может свободно создавать и запускать как передний, так и фоновый сервисы. Когда приложение переходит в фоновый режим, оно имеет окно в несколько минут, в котором ему по-прежнему разрешено создавать и использовать службы.

Обычно я нахожу окно примерно минуту, но это, конечно, может отличаться для других.

Просмотрите общие журналы устройств (запустите adb logcat из командной строки или отключите фильтры в окне Logcat в Android Studio) после того, как вы создадите фоновое приложение, и найдите что-то вроде:

09-26 13: 25: 37.150 4741 4756 W ActivityManager: остановка службы из-за простоя приложения: u0a267 -1m12s700ms com.example / .MyService

Любой запрос на запуск службы после этого должен вызвать исключение. Я полагаю, вам нужно увеличить время ожидания до минуты или двух.

...