Isso acabará por chegar à sua pergunta, mas primeiro quero abordar uma série de questões levantadas em seus vários comentários para as várias respostas já dadas no momento em que este artigo foi escrito. Não tenho a intenção de mudar de idéia - eles estão aqui para outros que vierem a ler este post no futuro.
O ponto é que não posso permitir que o Android determine quando meu aplicativo será encerrado. essa deve ser a escolha do usuário.
Milhões de pessoas estão perfeitamente felizes com o modelo em que o ambiente fecha o aplicativo conforme necessário. Esses usuários simplesmente não pensam em "encerrar" o aplicativo Android, assim como não pensam em "encerrar" uma página da Web ou "encerrar" um termostato.
Os usuários do iPhone são praticamente da mesma maneira, pois pressionar o botão do iPhone não necessariamente "parece" que o aplicativo foi encerrado, pois muitos aplicativos do iPhone retomam de onde o usuário parou, mesmo se o aplicativo realmente foi desligado (apenas no iPhone permite um aplicativo de terceiros por vez, no momento).
Como eu disse acima, há muitas coisas acontecendo no meu aplicativo (dados sendo enviados ao dispositivo, listas com tarefas que sempre devem estar lá etc.).
Não sei o que significa "listas com tarefas que sempre devem estar lá", mas os "dados enviados ao dispositivo" são uma ficção agradável e, de qualquer forma, não devem ser executados por uma atividade. Use uma tarefa agendada (via AlarmManager
) para atualizar seus dados para obter a máxima confiabilidade.
Nossos usuários efetuam login e não podem fazer isso toda vez que recebem uma ligação e o Android decide encerrar o aplicativo.
Existem muitos aplicativos para iPhone e Android que lidam com isso. Geralmente, é porque eles mantêm credenciais de logon, em vez de forçar os usuários a efetuarem o login manualmente sempre.
Por exemplo, queremos verificar as atualizações ao sair do aplicativo
Isso é um erro em qualquer sistema operacional. Pelo que você sabe, o motivo pelo qual o aplicativo está sendo "encerrado" é porque o sistema operacional está sendo desligado e o processo de atualização falhará no meio do caminho. Geralmente, isso não é uma coisa boa. Verifique as atualizações no início ou as atualizações totalmente de forma assíncrona (por exemplo, através de uma tarefa agendada), nunca na saída.
Alguns comentários sugerem que pressionar o botão Voltar não mata o aplicativo (veja o link na minha pergunta acima).
Pressionar o botão VOLTAR não "mata o aplicativo". Finaliza a atividade que estava na tela quando o usuário pressionou o botão VOLTAR.
Ele deve terminar apenas quando os usuários quiserem terminar - nunca de qualquer outra maneira. Se você não pode escrever aplicativos que se comportam assim no Android, acho que o Android não pode ser usado para escrever aplicativos reais = (
Os aplicativos da Web também não podem. Ou WebOS , se eu entendi o modelo deles corretamente (ainda não tive a chance de brincar com um). Em todos eles, os usuários não "encerram" nada - eles simplesmente partem. O iPhone é um pouco diferente, pois atualmente só permite que uma coisa seja executada de cada vez (com algumas exceções) e, portanto, o ato de sair implica um encerramento bastante imediato do aplicativo.
Existe uma maneira de eu realmente sair do aplicativo?
Como todos os outros disseram, os usuários (via BACK) ou seu código (via finish()
) podem fechar sua atividade em execução no momento. Os usuários geralmente não precisam de mais nada, para aplicativos escritos corretamente, assim como não precisam de uma opção "sair" para usar aplicativos da Web.
Não há dois ambientes de aplicativos iguais, por definição. Isso significa que você pode ver as tendências nos ambientes à medida que novas surgem e outras são enterradas.
Por exemplo, há um movimento crescente para tentar eliminar a noção de "arquivo". A maioria dos aplicativos da Web não força os usuários a pensar em arquivos. Aplicativos para iPhone normalmente não forçam os usuários a pensar em arquivos. Aplicativos Android geralmente não forçam os usuários a pensar em arquivos. E assim por diante.
Da mesma forma, há um movimento crescente para tentar eliminar a noção de "encerrar" um aplicativo. A maioria dos aplicativos da Web não força o logout do usuário, mas o encerra implicitamente após um período de inatividade. A mesma coisa acontece com o Android e, em menor grau, o iPhone (e possivelmente o WebOS).
Isso requer mais ênfase no design do aplicativo, focando nos objetivos de negócios e não aderindo a um modelo de implementação vinculado a um ambiente de aplicativo anterior. Os desenvolvedores que não tiverem tempo ou disposição para fazer isso ficarão frustrados com os ambientes mais novos que quebram seu modelo mental existente. Isso não é culpa de nenhum dos dois ambientes, assim como não é culpa de uma montanha por tempestades que fluem ao redor dela e não através dela.
Por exemplo, alguns ambientes de desenvolvimento, como Hypercard e Smalltalk, tiveram o aplicativo e as ferramentas de desenvolvimento combinadas em uma configuração. Esse conceito não pegou muito, fora das extensões de idioma dos aplicativos (por exemplo, VBA no Excel , Lisp no AutoCAD ). Os desenvolvedores que criaram modelos mentais que presumiram a existência de ferramentas de desenvolvimento no próprio aplicativo, portanto, tiveram que mudar seu modelo ou limitar-se a ambientes onde seu modelo seria verdadeiro.
Então, quando você escreve:
Juntamente com outras coisas confusas que descobri, acho que o desenvolvimento do nosso aplicativo para Android não vai acontecer.
Isso parece ser o melhor para você, por enquanto. Da mesma forma, eu aconselho você a não tentar portar seu aplicativo para a Web, já que alguns dos mesmos problemas que você relatou com o Android também encontrarão em aplicativos da Web (por exemplo, nenhuma "rescisão"). Ou, inversamente, um dia, se você fazê- port seu aplicativo para a Web, você pode achar que o fluxo do aplicativo Web pode ser um jogo melhor para o Android, e você pode revisitar uma porta Android naquele momento.