Я хочу, чтобы мое приложение сохраняло события (запускаемые SDK) в базе данных (используя область), даже если приложение находится в фоновом режиме. Моя концепция состояла в том, чтобы использовать Сервис, который выполняет инициализацию SDK и прослушивает события. Запуская эту Службу в методе onCreate()
моего пользовательского класса Приложения, я хотел убедиться, что Служба поддерживается, пока приложение находится в фоновом режиме, чтобы я не пропустил ни одно событие, которое будет сохранено в базе данных.
Но теперь, начиная с Android 8, фоновые сервисы больше не разрешены. Но я не хочу использовать Foreground Service, потому что мне нужно будет отображать уведомление. И я не хочу, чтобы пользователь знал, что события хранятся в базе данных в фоновом режиме. Я думаю, что эта информация носит технический характер для обычных пользователей.
Я понял проблему, когда Application.onCreate()
хотел запустить службу, но было сгенерировано исключение:
Причина: java.lang.IllegalStateException: запуск запрещен
Service Intent {
cmp = my.package.name.debug / my.package.name.service.MyService}: приложение
в фоновом режиме uid UidRecord {94b2e4a u0a204 SVC простаивает
change: idle | uncached procs: 1 сек (0,0,0)}
Примечательно, что исключение выдается, если я убиваю задачу из моего приложения. Так что Application.onCreate()
вызывается, если я убью приложение.
Наконец, я не уверен, является ли Служба подходящей для моего случая использования.
У меня есть два вопроса:
- Какой компонент использовать, если я хочу сохранить события в базе данных, также если мое приложение работает в фоновом режиме?
- Почему уничтожение приложения вызывает приложение
onCreate()
?