Ну, даже если бы вы использовали переменную экземпляра, я бы подумал, что это не способ сделать это.
Кто будет звонить destroy()
? Я надеюсь, что нет, это работа ОС, чтобы сделать это.
Но когда вы удерживаете активную блокировку, очень маловероятно, что ваш destroy()
метод будет вызван, потому что ОС сначала уничтожит другие действия / службы.
Кроме того, уже слишком поздно приобретать блокировку от пробуждения в методе onCreate()
. До достижения onCreate()
телефон, возможно, уже перешел в спящий режим, когда вы активируете Службу из-за тревоги или из-за активности в фоновом режиме.
Трудно сказать, что вы должны сделать по-другому, потому что вы не представляете много контекста.
Обычный ход событий таков.
BroadcastReceiver
вызывается, и в onReceive()
вы получаете блокировку пробуждения и помещаете ее в статическую переменную вашего сервиса. Когда служба завершена, она должна вызвать stopSelf()
, снять блокировку пробуждения и затем обнулить статическую переменную, которая сохраняет ссылку на блокировку.
Кроме того, если вы используете Сервис, вполне вероятно, что полная блокировка пробуждения - это не то, что вам нужно, а частичная блокировка пробуждения. Вам не нужен экран, чтобы остаться, верно?
Извините, но использование пробужденных замков действительно сложно из-за проблем, которые я описал выше. Это определенно сложная тема, и ее легко испортить. Если вы это сделаете, ваше приложение получит очень неприятные комментарии, потому что слишком долгое удержание является серьезным нарушением, поскольку оно разряжает батарею.
Пожалуйста, не принимайте это неправильно, но, учитывая природу проблемы, которую вы опубликовали здесь (синтаксис / ошибка компилятора), я настоятельно рекомендую поискать решение без службы и пробуждения.