“Algo errado aqui, não esperava que o pacote fosse retomado” no Android Logcat
-
24-09-2019 - |
Pergunta
Eu tenho um aplicativo Android modelado após o LunarLander
Exemplo do Google. Estou depurgando -o em um dispositivo real, (Motorola Droid
) com Android 2.0
. Quando a orientação muda, o programa trava em um NullPointerException
. Logcat de pouco antes do Crash:
02-01 00:24:27.956: DEBUG/nate(8358): Starting Game
02-01 00:24:36.878: DEBUG/dalvikvm(1086): GC freed 1788 objects / 92256 bytes in 1389ms
02-01 00:24:38.542: INFO/WindowManager(1021): Setting rotation to 1, animFlags=0
02-01 00:24:38.558: INFO/ActivityManager(1021): Config changed: { scale=1.0 imsi=310/4 loc=en_US touch=3 keys=2/1/2 nav=2/2 orien=2 layout=34}
02-01 00:24:38.620: WARN/UsageStats(1021): Something wrong here, didnt expect org.nifong.leeder to be resumed
02-01 00:24:38.886: DEBUG/nate(8358): New Surface dimensions: 854x442
02-01 00:24:38.886: DEBUG/nate(8358): flies was null
A primeira linha que me preocupa é "Something wrong here"
no 24:38.620
. Não tenho idéia do que isso significa, mas acho que é devido a não reagir adequadamente à mudança da tela.
Em seguida, recebo uma mensagem de depuração de que me imprimi dentro do meu próprio método surfaceChanged()
sobre as novas dimensões da superfície.
Então eu imprimo a mensagem de depuração sobre se as moscas eram null
. flies
é o campo que eventualmente causa o NullPointerException
. É criado uma vez e nunca mais escrito para o restante do programa. Eu sei que não era nulo antes do acidente, porque foi lido várias vezes.
Alguém tem uma idéia de como minha variável de membro privado passou a ser nula apenas por essas pistas?
Eu incluiria código, mas há muito e não sei o que seria relevante.
Solução 2
Eu consertei adicionando essas duas linhas à tag de atividade no meu arquivo de manifesto
android:configChanges="keyboardHidden|orientation"
android:screenOrientation="landscape"
Isso diz que meu aplicativo lidará com as mudanças de teclado e orientação por conta própria (por não fazer nada) e prefere correr na paisagem o tempo todo.
Outras dicas
Alterações de orientação no estado do Android afetam. Basicamente, sua atividade é destruída e recriada. Portanto, você deve estar ciente do que Ciclo de vida do Android Os eventos serão chamados e como salvar o estado.
Você também precisa ter cuidado com static
Instâncias e como isso afeta esse ciclo de vida.
Aqui está uma postagem no blog explicando um pouco disso.