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.

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top