Ao pressionar o botão Voltar, gostaria que meu aplicativo fosse para o estado parado, em vez do estado destruído.
Nos documentos do Android , afirma:
... nem todas as atividades têm o comportamento de serem destruídas quando pressionar VOLTAR. Quando o usuário começa a tocar música no aplicativo Música e pressiona VOLTAR, o aplicativo substitui o comportamento normal das costas, impedindo que a atividade do player seja destruída e continua tocando, mesmo que sua atividade não seja mais visível.
Como replico essa funcionalidade no meu próprio aplicativo?
Eu acho que deve haver três possibilidades ...
Capturar o botão Voltar pressione (como abaixo) e, em seguida, chame os métodos que o botão inicial chamar.
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if ((keyCode == KeyEvent.KEYCODE_BACK)) { Log.d(this.getClass().getName(), "back button pressed"); } return super.onKeyDown(keyCode, event); }
Capture o pressionamento do botão voltar e, em seguida, falsifique um pressionamento do botão home.
Capture o botão voltar, pressione e inicie uma Atividade da tela inicial, colocando efetivamente a Atividade do meu aplicativo no estado parado.
Editar: Eu sei sobre serviços e estou usando um no aplicativo ao qual esse problema está relacionado. Esta pergunta é especificamente sobre colocar a Atividade no estado parado, e não no estado destruído ao pressionar o botão Voltar.
Respostas:
Na maioria das vezes, você precisa criar um serviço para executar algo em segundo plano, e o seu visível
Activity
simplesmente controla issoService
. (Tenho certeza de que o Music player funciona da mesma maneira, portanto, o exemplo nos documentos parece um pouco enganador.) Se for esse o caso, vocêActivity
poderá,finish
como sempre, eService
ainda estará em execução.Uma abordagem mais simples é capturar o
Back
botão pressionar e chamar moveTaskToBack (true) da seguinte maneira:Eu acho que a opção preferida deve ser que uma Atividade termine normalmente e seja capaz de se recriar, por exemplo, lendo o estado atual de um Serviço, se necessário. Mas
moveTaskToBack
pode ser usado como uma alternativa rápida de vez em quando.OBSERVAÇÃO : conforme apontado por Dave abaixo do Android 2.0, foi introduzido um novo
onBackPressed
método e essas recomendações sobre como lidar com o botão Voltar.fonte
Use o seguinte código:
fonte
Se você quiser pegar o botão Voltar, dê uma olhada nesta postagem no Blog do desenvolvedor do Android . Ele cobre a maneira mais fácil de fazer isso no Android 2.0 e a melhor maneira de fazer isso para um aplicativo que roda em 1.xe 2.0.
No entanto, se sua atividade for interrompida, ela poderá ser interrompida, dependendo da disponibilidade de memória no dispositivo. Se você deseja que um processo seja executado sem interface do usuário, crie um
Service
. A documentação diz o seguinte sobre serviços:Isso parece apropriado para suas necessidades.
fonte
tente substituir o vazio
onBackPressed()
definido na classe android.app.Activity.fonte
se isso ajuda outra pessoa, eu tive uma atividade com dois layouts que eu alternava para visibilizar, tentando emular um tipo de estrutura página1> página2. se eles estavam na página 2 e pressionaram o botão Voltar, eu queria que eles voltassem à página 1; se eles pressionaram o botão Voltar na página 1, ainda deve funcionar normalmente. É bem básico, mas funciona
espero que ajude alguém, felicidades
fonte
Exemplo de trabalho ..
Certifique-se de não chamar super.onBackPressed ();
Dessa forma, o botão Voltar funciona como o botão Início. Não termina sua atividade, mas leva-a para segundo plano
A segunda maneira é chamar
moveTaskToBack(true);
emonBackPressed
e certifique-se de removersuper.onBackPressed
fonte
Ainda melhor, que tal OnPause () :
Chamado como parte do ciclo de vida da atividade quando uma atividade está em segundo plano, mas ainda não foi eliminada. A contraparte de onResume ().
Quando a atividade B é iniciada na frente da atividade A, esse retorno de chamada será invocado em A. B não será criado até que a onPause (A) retorne, portanto,
enter code here
não faça nada longo aqui.Esse retorno de chamada é usado principalmente para salvar qualquer estado persistente que a atividade esteja editando e garantir que nada seja perdido se não houver recursos suficientes para iniciar a nova atividade sem antes eliminar essa.
Esse também é um bom lugar para fazer coisas como interromper animações e outras coisas que consomem uma quantidade considerável de CPU para fazer a mudança para a próxima atividade o mais rápido possível ou fechar recursos que são de acesso exclusivo, como a câmera.
fonte
Substitua onBackPressed () após o Android 2.0. Tal como
fonte
Eu tentei todas as soluções acima, mas nenhuma delas funcionou para mim. O código a seguir me ajudou, ao tentar retornar ao MainActivity de uma maneira que onCreate é chamado:
Intent.FLAG_ACTIVITY_CLEAR_TOP é a chave.
fonte
Eu uso o respondente @Mirko N. usando o novo Custom EditText
Em seguida, defina os dados da sua atividade
Obrigado.
fonte