В соответствии с 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 или выше.