Qual é a diferença entre START_STICKY
e START_NOT_STICKY
ao implementar serviços no android? Alguém poderia apontar para alguns exemplos padrão ..?
fonte
Qual é a diferença entre START_STICKY
e START_NOT_STICKY
ao implementar serviços no android? Alguém poderia apontar para alguns exemplos padrão ..?
Ambos os códigos são relevantes apenas quando o telefone fica sem memória e mata o serviço antes de concluir a execução. START_STICKY
informa ao sistema operacional para recriar o serviço depois que ele tiver memória suficiente e chame onStartCommand()
novamente com uma intenção nula. START_NOT_STICKY
diz ao sistema operacional para não se preocupar em recriar o serviço novamente. Há também um terceiro código START_REDELIVER_INTENT
que informa ao sistema operacional para recriar o serviço e reenviar a mesma intenção onStartCommand()
.
Este artigo de Dianne Hackborn explicou os antecedentes disso muito melhor do que a documentação oficial.
Fonte: http://android-developers.blogspot.com.au/2010/02/service-api-changes-starting-with.html
A parte principal aqui é um novo código de resultado retornado pela função, informando ao sistema o que deve ser feito com o serviço se o processo for interrompido enquanto estiver em execução:
START_STICKY é basicamente o mesmo que o comportamento anterior, onde o serviço é deixado "iniciado" e mais tarde será reiniciado pelo sistema. A única diferença das versões anteriores da plataforma é que, se ela for reiniciada porque seu processo foi interrompido, onStartCommand () será chamado na próxima instância do serviço com uma Intent nula, em vez de não ser chamado. Os serviços que usam esse modo sempre devem verificar esse caso e lidar com ele adequadamente.
START_NOT_STICKY diz que, após retornar de onStartCreated (), se o processo for interrompido sem nenhum comando de inicialização restante para entregar, o serviço será interrompido em vez de reiniciado. Isso faz muito mais sentido para serviços destinados a serem executados apenas durante a execução de comandos enviados a eles. Por exemplo, um serviço pode ser iniciado a cada 15 minutos a partir de um alarme para pesquisar algum estado da rede. Se ele for morto durante esse trabalho, seria melhor deixá-lo parar e começar na próxima vez que o alarme disparar.
START_REDELIVER_INTENT é como START_NOT_STICKY, exceto se o processo do serviço for interrompido antes de chamar stopSelf () para uma determinada intenção, essa intenção será entregue novamente até que seja concluída (a menos que após várias tentativas ainda não seja concluída, momento em que o sistema desiste). Isso é útil para os serviços que estão recebendo comandos de trabalho e deseja garantir que eles concluam o trabalho para cada comando enviado.
START_NOT_STICKY
?START_REDELIVER_INTENT
seja assimSTART_NOT_STICKY
. Em vez disso, é comoSTART_STICKY
Resposta do KISS
Diferença:
START_STICKY
o sistema tentará recriar seu serviço depois que ele for morto
START_NOT_STICKY
o sistema não tentará recriar seu serviço depois que ele for morto
Exemplo padrão:
fonte
START_REDELIVER_INTENT
. Acabei de testarSTART_STICKY
e matar o aplicativo por aplicativos recentes. Então, lembre-se do serviço. MasSTART_REDELIVER_INTENT
nunca liguei novamente. Por quê?A documentação
START_STICKY
eSTART_NOT_STICKY
é bastante direta.START_STICKY:
Exemplo: Amostra de Serviço Local
START_NOT_STICKY:
Exemplo: ServiceStartArguments.java
fonte