У меня есть очистка базы данных, которую мне нужно выполнить в работающем сервисном потоке. В нормальных условиях это произойдет, когда служба будет завершена и будет вызван onDestroy ().
Я заметил, что если я переустанавливаю или обновляю приложение во время работы службы, то onDestroy () не вызывается для службы. Есть ли в любом случае мое приложение может знать при следующем запуске, что это первый запуск после переустановки, чтобы он мог завершить некоторую очистку базы данных?
Чтобы уточнить, просто снова запустить службу не будет то, что мне нужно. Во многих случаях мой сервис запускается радиовещательным приемником, а не самим действием, поэтому я не могу полагаться на onPause для основного действия. Я не могу понять, как узнать, может ли служба уже запущена или была молча убита и нуждается в очистке.
Я хотел бы уточнить, так как другие, похоже, неправильно поняли. Во-первых, onDestroy просто не происходит в случае переустановки или обновления приложения. Общие настройки также не сбрасываются, поскольку приложение не было удалено. Во-вторых, Google определенно заявляет, что вы не можете полагаться на onDestroy, поэтому не стоит и бить меня за то, что я нашел быстрое решение, вместо того, чтобы спросить Google, почему onDestroy не работает. См. Документы API о onDestroy для действий. Сервисная документация не повторяет это предупреждение, но, очевидно, это верно. Единственное работающее решение, которое я нашел на сегодняшний день, это то, которое я разместил ниже в другой ветке StackOverflow.