startService на Android 9 - PullRequest
       19

startService на Android 9

0 голосов
/ 15 марта 2020

Согласно android документации от версии api v26 мы не можем использовать startService. Поэтому мы должны проверить версию, и если версия старше, чем Oreo, мы выполняем startService, иначе startForegroundService. С другой стороны, я установил на моем android smarthpone (android P IE 9) старое приложение «Счетчик телефона на экране», которое работает нормально. Затем я декомпилировал этот проект и обнаружил, что это приложение использует только startService, поэтому для меня это старое приложение не должно работать. На основе этого приложения я создаю свой собственный проект, который имеет точно такие же шаблоны (запускаю службу с помощью startService, которая регистрирует и отменяет регистрацию получателя, который прослушивает действие android .intent.action.SCREEN_ON). Приложение запущено, сервис запущен, но когда я убиваю приложение из меню, то сервис также был убит.

Почему некоторые старые приложения из магазина Google могут использовать очень старый и недопустимый код в одной из последних android версий?

1 Ответ

0 голосов
/ 15 марта 2020

В соответствии с android документацией от версии api v26 мы не можем использовать startService

Это не то, что документация заявляет. В нем говорится:

Метод startService() теперь выдает IllegalStateException, если приложение, нацеленное на Android 8.0 , пытается использовать этот метод в ситуации, когда это не так. разрешено создавать фоновые сервисы.

(выделение добавлено, и я скоро вернусь к этому)

Поэтому мы должны проверить версию, и если версия старше, чем Oreo затем мы запускаем startService, иначе startForegroundService.

Если вы будете запускать службу из фона, это действительно необходимо ... для новых приложений.

Почему некоторые старые Приложение из магазина Google может использовать очень старый и недопустимый код в одной из android версий?

Поскольку это приложение, по-видимому, не обновлялось годами. Он все еще имеет targetSdkVersion ниже 26. targetSdkVersion существует, чтобы сообщить Android, к какому уровню API адаптировано приложение. В этом случае, если targetSdkVersion ниже 26, Android знает, что приложение не настроено на использование startForegroundService(), поэтому Android ведет себя немного больше, чем старые версии Android.

* 1034. * Имейте в виду, что если вы распространяете через Play Store (и некоторые другие каналы распространения), новые и обновленные приложения не могут иметь старую targetSdkVersion. Например, сейчас (2020-03-14) для Play Store требуется targetSdkVersion из 28 или выше.
...