Android: Estado da força de aplicativos mortos
Até onde eu sei ler, o Android pode interromper meu processo a qualquer momento1.
Pode-se interpretar o artigo [1] de modo que, a qualquer momento, um processo possa sobreviver a uma falha. Como isso é tratado? Existem garantias de que métodos sejam chamados se um processo for morto dessa maneira? O artigo * não menciona.
Minha pergunta é: como você garante que um processo forçado a retomar de alguma maneira sã no próximo começo? O único estado que meu processo possui (supondo que nenhuma garantia seja feita para os métodos chamados quando o processo é interrompido) é o estado no armazenamento persistente (um banco de dados ou em outro local) e isso provavelmente ficará incompleto se o processo for forçado.
Exemplo concreto: digamos que peço a um Serviço que realize algum trabalho. Este trabalho não é algo como reproduzir um arquivo de música. É um trabalho que pode ser considerado "concluído" em algum momento (por exemplo, envio de dados para a web). Se meu serviço for morto, digamos que, após 50% do trabalho ser concluído, como meu aplicativo saberá se o trabalho foi bem-sucedido? Eu poderia ter um sinalizador no armazenamento persistente dizendo "pronto", mas, mesmo assim, o Android pode matar meu Serviço depois que eu enviar o último byte e antes de definir o sinalizador.
Existe alguma maneira comum de lidar com isso? Meu Serviço poderia, quando reiniciado, negociar com o servidor da Web para ver se o arquivo foi transferido, mas rapidamente se torna realmente complicado e não acho que resolveria o problema.
[Editar 1 início]
Estou ciente do texto a seguir [1], mas isso não resolve o problema dos serviços: "Esse último estado é gerado toda vez que o usuário sai dessa parte do aplicativo, não quando é eliminado"
[Editar 1 final]
[Editar 2 início]
Encontrei algo realmente interessante. Uma inconsistência aparente na documentação do Android relacionada a isso. Por favor, veja minha nova pergunta em2
[Editar 2 fim]
[Editar 3 início]
A "inconsistência aparente" foi resolvida. Eu não sou preciso quanto aos termos "aplicativo" / "processo" / "atividade". Esta questão ainda permanece, no entanto.
[Editar 3 final]