>

Fórum

Fórum da RL System, voltado para analistas, programadores etc. Tudo sobre linguagem de programação e desenvolvimento Full Stack: Banco de Dados, Android, C#, Java, .NET, PHP, Node, Javascript, TypeScript, Front, HTML e muito mais.



serviço não funciona standby


Tenho uma thead dentro de um serviço que fica executando um loop de um em um minuto, esta funcionando perfeitamente enquanto o celular não
entra em standby. ou seja se ficar muito tempo sem mexer nele o serviço para de funcionar e volta somente quando executo alguma tarefa no celular.

O serviço esta entrando em standby e não funciona.

Alguem sabe me dizer alguma coisa a respeito, preciso que o serviço não pare de funcionar.

Obrigado.



1 Resposta


O Alarm Manager mantém um bloqueio que mantém a CPU funcionando (CPU wake lock) enquanto o método OnReceive do receiver receptor do alarme está sendo executado. Isso garante que o telefone não vai dormir (sleep) até ter terminado de manusear o broadcast. Uma vez que o OnReceive () retorne, o Alarm Manager libera esse bloqueio. Isso significa que o telefone em alguns casos, entra em sleep assim que o seu OnReceive () é concluído. Se o seu Receiver do alarme chama o Context.startService (), é possível que o telefone possa entrar em sleep antes de o serviço solicitado seja iniciado. Para evitar isso, o seu BroadcastReceiver e o Service precisam implementar uma política separada de wake lock para garantir que o telefone continue funcionando até que o serviço esteja disponível.

Política de wake lock
Para isso, usamos o serviço do PowerManager. No exemplo mantemos a CPU rodando para executar um serviço. Essa opção é perfeita para o caso devido ao fato de que a CPU ficará rodando mesmo que o usuário aperte a tecla power.



PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");
wl.acquire();
//
// coloque aqui o seu código
//
wl.release();



Normalmente, colocamos o acquire no onCreate e o release no onDestroy.
Outra coisa, não devemos abusar disso devido ao fato de que isso vai consumir muito mais bateria do que o normal, principalmente nas outras opções que mantém o visor ligado.
Outras opções:


Flag Value.................................... CPU Screen Keyboard
PARTIAL_WAKE_LOCK.................... On Off Off
SCREEN_DIM_WAKE_LOCK............. On Dim Off
SCREEN_BRIGHT_WAKE_LOCK........ On Bright Off
FULL_WAKE_LOCK......................... On Bright Bright

Mais detalhes:
http://developer.android.com/reference/ ... nager.html
http://developer.android.com/reference/ ... nager.html

Permissão: android.permission.WAKE_LOCK