Pergunta

Eu tenho um aplicativo com um activity e um service.Se eu matar o activity enquanto o service está correndo, ele também morre.É muito importante para mim que o serviço não seja eliminado.Como fazer isso quando o sistema desliga (ou eu mato limpando a lista de "Aplicativos recentes") o activity o service ainda permanece ativo até terminar seu trabalho?Desde já, obrigado!

Foi útil?

Solução

É muito importante para mim que o serviço não morra

Seus processos podem ser eliminados a qualquer momento, por qualquer motivo, com base na atividade do usuário (lista de tarefas recentes, um gerenciador de tarefas de terceiros, "Forçar parada" nas configurações, etc.) ou com base nas necessidades do sistema operacional (a RAM do sistema está ficando baixa ).Você não pode evitar isso.

Você pode tomar algumas medidas para minimizar as chances de o sistema operacional decidir por conta própria encerrar seu processo, como usar startForeground() no serviço, mas isso impede que o usuário faça o que deseja com o processo do seu aplicativo.

Estou exibindo uma janela desse serviço, portanto, se o serviço parar, a janela desaparecerá.

Provavelmente, o usuário quer sua janela desaparecerá se o usuário estiver se livrando explicitamente do seu aplicativo por meio da lista de tarefas recentes, de um gerenciador de tarefas, etc.Você certamente está convidado a informar os usuários em sua documentação sobre quaisquer efeitos negativos que isso possa ter.

Você também pode experimentar colocar esse serviço em um processo separado.Meu entendimento é que isso não ajudará na lista de tarefas recentes no Android 4.4, embora possa ajudar em versões anteriores do Android.Se isso ajuda com gerenciadores de tarefas de terceiros provavelmente depende do gerenciador, e isso não deve ajudar com "Forçar parada" nas configurações.Isso também significa que você terá que lidar com IPC, aumento do consumo de RAM do sistema enquanto os processos principais e de serviço estão em execução, etc.

Outras dicas

Você pode tentar retornar START_STICKY de onStartCommand em seu serviço:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    handleCommand(intent);
    // We want this service to continue running until it is explicitly
    // stopped, so return sticky.
    return START_STICKY;
}

Você está executando um serviço vinculado?Nesse caso, o sistema irá eliminá-lo quando a última atividade do cliente for desconectada (terminar).Aqui está a sinopse do página de referência:

Quando o último cliente sai do serviço, o sistema destrói o serviço (a menos que o serviço também tenha sido iniciado por startService ()).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top