Fiquei me perguntando por que não usar android:configChanges="keyboardHidden|orientation"
em todas as atividades (quase todas;)?
Mercadorias:
- não precisa se preocupar com a sua atividade ter sido rotacionada
- é mais rápido
Não tão legal:
- precisa alterar seus layouts se eles dependem do tamanho da tela (por exemplo, layouts com duas colunas ou mais)
Ruim:
- nenhuma maneira flexível de ter layouts diferentes em diferentes orientações
- não é tão bom quando se usa fragmentos
Mas se não usamos layouts diferentes, por que não?
android
android-layout
Mikooos
fonte
fonte
Respostas:
Histórico Rápido
Por padrão, quando certas alterações de configuração de chave ocorrem no Android (um exemplo comum é uma alteração de orientação), o Android reinicia completamente a Atividade em execução para ajudá-lo a se ajustar a essas alterações.
Ao definir
android:configChanges="keyboardHidden|orientation"
no AndroidManifest, você está dizendo ao Android: "Por favor, não faça a redefinição padrão quando o teclado for puxado ou o telefone estiver girado; eu mesmo quero lidar com isso. Sim, eu sei o que estou fazendo "Isto é uma coisa boa? Veremos em breve ...
Não se preocupe?
Um dos profissionais com os quais você começa é o seguinte:
Em muitos casos, as pessoas acreditam erroneamente que quando têm um erro que está sendo gerado por uma mudança de orientação ("rotação"), elas podem simplesmente corrigi-lo inserindo
android:configChanges="keyboardHidden|orientation"
.No entanto, android: configChanges = "keyboardHidden | orientação" nada mais é do que um bandaid. Na verdade, existem muitas maneiras pelas quais uma alteração na configuração pode ser acionada. Por exemplo, se o usuário selecionar um novo idioma (ou seja, a localidade mudou), sua atividade será reiniciada da mesma maneira que ocorre por uma mudança de orientação. Se você quiser, pode ver uma lista de todos os diferentes tipos de alterações na configuração .
Editar : Mais importante, porém, como o hackbod aponta nos comentários, sua atividade também será reiniciada quando o aplicativo estiver em segundo plano e o Android decidir liberar memória matando-o. Quando o usuário retornar ao seu aplicativo, o Android tentará reiniciar a atividade da mesma maneira que ocorre se houver alguma outra alteração na configuração. Se você não conseguir lidar com isso - o usuário não ficará feliz ...
Em outras palavras, usar
android:configChanges="keyboardHidden|orientation"
não é uma solução para suas "preocupações". O caminho certo é codificar suas atividades para que elas fiquem felizes com qualquer reinício do Android. Esta é uma boa prática que irá ajudá-lo no caminho, para se acostumar.Então, quando devo usá-lo?
Como você mencionou, há uma vantagem distinta. Substituir a alteração de configuração padrão para uma rotação, manipulando você mesmo, acelerará as coisas. No entanto, essa velocidade vem com um preço de conveniência.
Simplificando, se você usar o mesmo layout para retrato e paisagem, estará em boa forma fazendo a substituição. Em vez de uma recarga completa da atividade, as visualizações simplesmente mudarão para preencher o espaço restante.
No entanto , se, por algum motivo, você usar um layout diferente quando o dispositivo estiver em modo paisagem, o fato de o Android recarregar sua Atividade será bom, pois ele carregará o layout correto. [Se você usar a substituição em uma atividade desse tipo e quiser fazer um novo layout mágico em tempo de execução ... boa sorte - está longe de ser simples]
Resumo Rápido
Por todos os meios, se
android:configChanges="keyboardHidden|orientation"
for certo para você, use-o. Mas lembre- se de testar o que acontece quando algo muda, porque uma mudança de orientação não é a única maneira de ativar uma reinicialização completa da atividade.fonte
Please don't do the default reset when the keyboard is pulled out
eu nunca vi uma atividade reiniciar para teclado retirar !Do meu ponto de vista: se o layout for o mesmo nos modos paisagem e retrato - você também pode desativar um dos dois no seu aplicativo.
A razão pela qual afirmo isso é que, como usuário, espero que o aplicativo me forneça algum benefício quando mudo de orientação. Se não importa como seguro meu telefone, não preciso escolher.
Tomemos, por exemplo, um aplicativo em que você tenha um ListView e, ao clicar em um ListItem, deseja exibir uma visualização detalhada desse item. Na paisagem, você odiaria isso dividindo a tela em duas, tendo o ListView à esquerda e a vista detalhada à direita. No Portrait, você teria a lista em uma tela e, em seguida, alteraria a tela para a exibição detalhada quando um ListItem for selecionado. Nesse caso, a mudança de orientação faz sentido, bem como diferentes layouts.
fonte
Eu não vejo por que .... reinicializações ocasionais estão ok na minha opinião ... configChanges lida com a maioria dos casos para mim ... bem, talvez em alguns tipos de aplicativos isso possa ser um problema, mas depende realmente do tipo de aplicativo e de como você restaura estado quando o aplicativo é reiniciado ... Quando um dos meus aplicativos é reiniciado, o usuário é logado novamente e a última atividade é aberta pelo meu código, e o usuário jus perde algumas etapas para voltar onde estava, mas não é grande coisa. Em outro, algum estado é sempre persistente e algum estado é sempre restaurado na reinicialização. Quando a atividade é reiniciada, deve ser que o aplicativo não tenha sido usado ou algo assim ... então não há problema algum ... No jogo, por exemplo, isso pode ser um problema, talvez ou em algum outro tipo de aplicativo que eu não conheça ...
Eu digo que, quando você faz dessa maneira, os aplicativos funcionam bem em circunstâncias normais. E o código é muito mais legível sem uma tonelada de lógica necessária para salvar e restaurar onde você só pode criar novos bugs e ter que mantê-lo o tempo todo ... com certeza se o Android fica sem energia e mata a janela do aplicativo, ele perde o contexto e começa de novo, mas isso acontece apenas em situações especiais e em dispositivos mais novos eu acredito que isso é cada vez mais raro ...
Então me mate, mas eu uso isso em aplicativos com bastante êxito ... android: configChanges = "locale | teclado | tecladoHidden | orientação | screenLayout | uiMode | screenSize | smallestScreenSize" Mas eu entendo que para alguns tipos especiais de aplicativos pode não ser bom caminho, mas a maioria dos aplicativos pode viver com isso apenas OK.
fonte
Sim, acho que pausar será mais rápido do que liberar o player. Ainda tem uma pausa.
Agora encontrei uma solução que não pausa a música.
Informe no manifesto que você manipulará a alteração de configuração para orientação da tela e, em seguida, use o método onConfigurationChanged para carregar o arquivo de layout. Ao fazer isso no logCat, vejo onPause, onCreate e onResume não são chamados e, portanto, a música não é pausada.
atualize o manifesto para lidar com a orientação.
adicione este código
fonte