2015-03-11 2 views
20

У меня есть служба, которая должна выполняться в фоновом режиме. Он начинается, когда мое приложение открыто и заканчивается, когда пользователь отключается от моего приложения.WakeLock финализировалась, хотя все еще была ошибка, хотя я ее освобождаю

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

Я достиг этого с помощью WakeLock, но по какой-то причине я получаю ошибку в названии.

Это связано с тем, что я могу потерять память Wake Wake (если я правильно понимаю).

Я могу вызвать ошибку, перезапустив приложение.

Вот соответствующий код:

public class SomeService extends Service { 

    @Override 
    public int onStartCommand(Intent intent, int flags, int startId) { 
     super.onStartCommand(intent, flags, startId); 

     PowerManager manager = (PowerManager) getSystemService(POWER_SERVICE); 

     mWakeLock = manager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "TAG"); 

     if (!mWakeLock.isHeld()) mWakeLock.acquire(); 

     //Handle other processing 

     return START_STICKY; 
    } 

    @Override 
    public void onDestroy() { 

     if (mWakeLock.isHeld()) mWakeLock.release(); 
     super.onDestroy(); 
    } 

} 

Я озадачен, потому что в моем onDestroy() я выпускаю WakeLock. Я не уверен, что вызывает ошибку.

+1

Я также сталкиваюсь с той же проблемой. Итак, вы нашли решение? –

+1

Вы пытались переместить создание блокировки в 'onCreate()'? – iosdude

+0

@iosdude Я пробовал, но это то же самое. – Pitel

ответ

6

Service.onStartCommand() можно назвать несколько раз до Service.onDestroy(), так как они не представляют «противоположные» события/состояния (см. docs). Вы можете приобрести несколько блокировок (и каждый раз потерять ссылку на предыдущую приобретенную блокировку), но когда вы завершаете обслуживание/приложение, вы отпускаете только последний.

+0

Но что я получу wakelock в 'OnCreate()' методе? Это то, что я делаю, но все еще получаю ошибку. – Pitel

+0

@Pitel, можете ли вы разместить свой код? (хотя вам может потребоваться создать новый вопрос, так как это, вероятно, связанная, но другая проблема) –

+0

Вот мой код: http://pastebin.com/zQTBuvaw – Pitel

Смежные вопросы