Encontrei alguns códigos para sair de um aplicativo Android programaticamente. Ao chamar qualquer um dos seguintes códigos em onDestroy (), ele encerrará o aplicativo completamente?
System.runFinalizersOnExit(true)
(OU)android.os.Process.killProcess(android.os.Process.myPid());
Não quero executar meu aplicativo em segundo plano depois de clicar no botão sair. Por favor, sugira que eu possa usar qualquer um desses códigos para sair do meu aplicativo? Se sim, qual código posso usar? É uma boa maneira de sair do aplicativo no Android?
Respostas:
Desde a API 16, você pode usar o método finishAffinity, que parece bem próximo de fechar todas as atividades relacionadas por seu nome e descrição do Javadoc:
Desde a API 21, você pode usar um comando muito semelhante
fonte
System.exit(0);
. Obrigado pela sua resposta! Finalmente encontrei uma solução decente.System.exit(0)
é a única solução que funcionou para mim.esta é a melhor maneira de sair do seu aplicativo. !!!
A melhor solução para mim.
fonte
System.exit(0);
. A solução certa foi publicado por @sivi (sua resposta é acima)finishAffinity();
System.exit(0);
Se você usará apenas
finishAffinity();
sem queSystem.exit(0);
seu aplicativo seja encerrado, mas a memória alocada ainda estará em uso pelo telefone, então ... se você deseja que um aplicativo seja limpo e realmente saia, use os dois.Este é o método mais simples e funciona em qualquer lugar, saia do aplicativo de verdade, você pode ter muita atividade aberta e ainda sairá sem problemas.
exemplo em um botão, clique
ou se você quiser algo legal, por exemplo, com uma caixa de diálogo de alerta com 3 botões SIM NÃO e CANCELAR
fonte
System.exit(0);
Você não deve liberar essa memória, o sistema fará isso por você, se necessário. Este é o comportamento pretendido.Por favor, pense bem se você precisa matar o aplicativo: por que não deixar o sistema operacional descobrir onde e quando liberar os recursos?
Caso contrário, se você tiver certeza absoluta, use
Como reação ao comentário de @dave appleton: a primeira coisa que você leu foi a grande combinação de perguntas / respostas @gabriel postou: O encerramento de um aplicativo é desaprovado?
Agora, assumindo que temos isso, a pergunta aqui ainda tem uma resposta, sendo que o código que você precisa se estiver fazendo alguma coisa para sair é
finish()
. Obviamente, você pode ter mais de uma atividade, etc, etc., mas esse não é o ponto. Vamos executar por alguns dos casos de usoEntão, no final, é claro,
finish()
não mata tudo, mas ainda é a ferramenta que você precisa, eu acho. Se houver um caso de uso para "matar todas as atividades", ainda não o encontrei.fonte
finish()
não mata o aplicativo.finish()
é usado o tempo todo:Call this when your activity is done and should be closed.
é o mesmo efeito que pressionar o botão "voltar".Activity
(não oApplication
). Por exemplo, você pode iniciar uma nova atividade para mostrar ao usuário algumas informações. Após um tempo limite ou pressionando 'OK', você pode ligarfinish()
para retornar à atividade de chamada.Eu acho que o aplicativo deve ser morto em algum caso. Por exemplo, existe um aplicativo que pode ser usado somente após o login. A atividade de login possui dois botões, 'login' e 'cancel'. Quando você clica no botão 'cancelar', definitivamente significa 'Finalizar o aplicativo'. Ninguém quer o aplicativo vivo em segundo plano. Por isso, concordo que alguns casos precisam desligar o aplicativo.
fonte
Crie um
ExitActivity
e declare-o no manifesto. E ligueExitActivity.exit(context)
para sair do aplicativo.fonte
Não há nenhum aplicativo saindo no android , SampleActivity.this.finish (); finalizará a atividade atual.
Quando você muda de uma atividade para outra, continue com a anterior
fonte
Primeiro de tudo, essa abordagem requer min Api 16.
Vou dividir esta solução em 3 partes para resolver esse problema mais amplamente.
1. Se você deseja sair do aplicativo em uma Atividade, use este trecho de código:
2. Se você deseja sair do aplicativo em uma classe não Activity que tenha acesso a Activity, use este trecho de código:
3. Se você deseja sair do aplicativo em uma classe que não seja Activity e não pode acessar atividades como Service, eu recomendo que você use BroadcastReceiver. Você pode adicionar essa abordagem a todas as suas atividades no seu projeto.
Crie variáveis de instância LocalBroadcastManager e BroadcastReceiver. Você pode substituir getPackageName () + ". Closeapp" se desejar.
Adicione-os ao método de atividade onCreate ().
Além disso, não se esqueça de chamar unregister receiver no método de atividade onDestroy ()
Para sair do aplicativo, você deve enviar a transmissão usando LocalBroadcastManager, que eu uso na minha classe PlayService, que estende o Serviço.
fonte
Você pode usar
finishAndRemoveTask ()
da API 21fonte
Depende de quão rápido você deseja fechar seu aplicativo.
Uma maneira segura de fechar seu aplicativo é finishAffinity ();
Ele fecha o aplicativo depois que todos os processos terminam o processamento. Isso pode levar algum tempo. Se você fechar o aplicativo dessa maneira e reiniciá-lo após um curto período de tempo, é possível que o novo aplicativo seja executado no mesmo processo. Com todos os processos não concluídos e objetos singleton do aplicativo antigo.
Se você quiser ter certeza de que seu aplicativo está fechado completamente, use System.exit (0);
Isso fechará seu aplicativo imediatamente. Mas é possível que você danifique os arquivos que seu aplicativo abriu ou que uma edição nas preferências compartilhadas não termine. Portanto, use isso com cuidado.
Se você usar o watchdog em combinação com uma tarefa de longa execução, poderá ver as influências dos diferentes métodos.
Isso mata seu aplicativo após 2 segundos sem exibir uma caixa de diálogo ANR ou algo assim. Se você remover System.exit (0) , executar esse código e reiniciar o aplicativo depois que ele for fechado, ocorrerá um comportamento estranho, porque o loop infinito ainda está em execução.
fonte
É melhor usar
finish()
se você estiver dentroActivity
ougetActivity().finish()
se estiver dentroFragment
.Se você deseja sair do aplicativo completamente, use:
fonte
Maneira fácil e simples de sair do aplicativo
fonte
Queremos um código que seja robusto e simples. Esta solução funciona em dispositivos antigos e dispositivos mais recentes.
fonte
Eu acho que o que você está procurando é isso
fonte
fonte
Semelhante ao @MobileMateo, mas no Kotlin
fonte
Não tenho certeza se isso é desaprovado ou não, mas é assim que eu faço ...
Etapa 1 - Normalmente, tenho uma classe que contém métodos e variáveis que desejo acessar globalmente. Neste exemplo, chamarei de classe "App". Crie uma variável estática Activity dentro da classe para cada atividade que seu aplicativo tiver. Em seguida, crie um método estático chamado "close" que executará o
finish()
método em cada uma dessas variáveis de Atividade se elas NÃO forem nulas . Se você tem uma atividade principal / principal, feche-a por último:Etapa 2 - em cada uma de suas atividades, substitua os métodos
onStart()
eonDestroy()
. EmonStart()
, defina a variável estática na sua classe App como "this
". EmonDestroy()
, defina-o igual anull
. Por exemplo, na classe "Activity1":Etapa 3 - Quando você deseja fechar seu aplicativo, basta ligar
App.close()
de qualquer lugar. Todas as atividades instanciadas serão fechadas! Como você está apenas encerrando atividades e não matando o aplicativo em si (como nos exemplos), o Android é livre para assumir a partir daí e fazer a limpeza necessária.Mais uma vez, não sei se isso seria desaprovado por qualquer motivo. Nesse caso, eu adoraria ler comentários sobre o porquê e como pode ser melhorado!
fonte
api>=16
usofinishAffinity()
, use este método.Sair de um aplicativo é mal visto? . Acesse este link. Responde a sua pergunta. O sistema faz o trabalho de matar um aplicativo.
Suponha que você tenha duas atividades A e B. Você navega de A a B. Quando você clica no botão Voltar, sua atividade B é ativada do backstack e destruída. Atividade anterior na atividade de pilha inversa A é focada.
Você deve deixar para o sistema decidir quando matar o aplicativo.
vazio público
finish()
Chame isso quando sua atividade estiver concluída e deve ser fechada.
Suponha que você tenha muitas atividades. você pode usar a barra de ação. Ao clicar no ícone inicial, navegue até a MainActivity do seu aplicativo. No MainActivity, clique no botão Voltar para sair do aplicativo.
fonte
Para sair do aplicativo, você pode usar o seguinte:
Também para interromper os serviços, chame o seguinte método:
fonte
Isso pode ser muito tarde e também de acordo com as diretrizes de que você não deve lidar sozinho com o processo do ciclo de vida (como o SO faz isso por você). Uma sugestão seria que você registrasse um receptor de transmissão em todas as suas atividades com "
finish()
" nas respectivasonReceive()
e sempre que desejar sair, você pode simplesmente passar uma intenção indicando que todas as atividades devem ser encerradas ..... Embora tenha certeza de que você " cancele o registro "do receptor em seusonDestroy()
métodos.fonte
Não é uma boa decisão, porque é contra os princípios de processamento de aplicativos do Android. O Android não mata nenhum processo, a menos que seja absolutamente inevitável. Isso ajuda os aplicativos a iniciarem mais rapidamente, porque eles sempre são mantidos na memória. Portanto, você precisa de um motivo muito especial para interromper o processo do seu aplicativo.
fonte
A solução correta e exata para sair do aplicativo ao clicar no botão está usando o código abaixo:
// Botão On pressionado Voltar evento
fonte
Se você estiver usando o Kotlin, a maneira correta de sair do aplicativo e a alternativa
System.exit()
é um método internoVeja a documentação .
Número
0
como parâmetro significa que a saída é pretendida e nenhum erro ocorreu.fonte
Isso matará qualquer coisa;)
fonte
Tente isto
fonte
A maneira mais fácil de encerrar um aplicativo de uma atividade, sem quebrar a lógica do Android e sem adicionar mais código às atividades existentes e passar extras, é a seguinte:
o
QuitApplicationActivity
ser:fonte
A resposta da @Sivi fecha o aplicativo. Porém, no retorno, se você tiver algumas atividades filho, outra atividade inacabada poderá ser aberta. Eu adicionei
noHistory:true
minhas atividades para que o aplicativo de retorno comece a partir da MainActivity.fonte
Apenas para adicionar um à lista de métodos brutais de encerramento de um aplicativo:
Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);
fonte
Process.killProcess(Process.myPid())
faz o mesmo, mas é mais curtovocê pode encerrar seus aplicativos completos. portanto
funcionará 100%. Boa sorte!
fonte
Basta usar terminar () na tecla Voltar, pressionar emKeypressed ()
fonte