【AndEngine】onPauseでNullPointerException

Nov 17, 2013  

一部機種において(Androidのバージョンの問題?)
起動直後に強制終了してしまうバグに悩まされたのでメモ。

logcatでシステムのログを確認すると
SimpleLayoutGameActivityを継承しているMainActivityが
謎の挙動をしている模様。

onCreate,onResumeの後になぜかonPauseが呼び出され
NullPointerExceptionで強制終了していました。

MainActivityのメンバとして以下を定義し

private boolean isGoing = false;
onPauseの処理をisGoingがtrueのときにしかしないように
ifで指定してやることで解決。
onCreateSceneでisGoingをtrueにしてます。

onResumeの後にonPauseが呼ばれるなんて
ライフサイクル無視しすぎやん!ってすごく困ったんですが、
どうやらonResumeあたりでエラーが発生して
AndEngineがアプリを再起動しようとした結果
onPauseが呼ばれていたみたいです。
で、onCreateSceneあたりで生成する予定のオブジェクトは
ここでonPauseが呼ばれたときにはまだ生成されていないので
それらのオブジェクトを操作する処理がonPauseにかかれていると
NullPointerExceptionで落ちるというわけでした。

ちなみにそのエラーには以下のようなコメントがついていて

UpdateThread interrupted. Don’t worry - this EngineDestroyedException is most likely expected!

UpdateThreadが中断されちゃったよ!
まあこのEngineが落ちちゃう例外はよくあることだから安心して!
ってなわけなのでどうやらAndEngine側に問題がある模様。

Forumなどを探して見たところ
ソースはありませんでしたが「99.999%そのエラーは起きるよ」
というコメントがあるほどで私の技術力では何ともしがたい問題のようです。
なんだかなー

このエントリーをはてなブックマークに追加