2013年5月31日金曜日

SurfaceView Canvas NullPointerException デバッグできない

SurfaceViewを使用したアプリでデバッグ中のみ"NullPointerException"が発生しました。

通常起動では問題なく動くのですがデバッグができないのは不便なので調べてみました。
どうやらキャンパスのロックが発生しているようです。

アプリはSurfaceViewのコールバックにのみスレッドを描画スレッドをもたせています。
明示的にキャンパスをロックしている箇所は一つだけです。描画スレッドも一つだけ。

誰がキャンパスをロックしているのかと調べた結果。
surfaceChangedが犯人です。

どうやらデバッグ時はsurfaceChangedが遅延するようで、描画スレッドのキャンパスロックと被るようです。

なので、描画スレッドをsurfaceChangedの後に起動するように修正しました。

ライフサイクルとスレッドを同期させる設計にするべきかもしれません。



0 件のコメント:

コメントを投稿