検索プログラマのメモ帳

壁にぶつかったら検索で調べるプログラマのちょっと遅れたメモ帳。たまに自分で挑戦する。

Skip to: Content | Sidebar | Footer

SurfaceViewのholder.lockCanvas()でNullPointerException

3 10月, 2012 (10:58) | android開発 | By: admin

SurfaceViewのholder.lockCanvas()でNullPointerExceptionが発生するという問題があった。理由のわからないバグで結構はまった。

原因:SurfaceViewのsurfaceCreated()が呼ばれる前に、holder.lockCanvas()が呼ばれるとNullPointerExceptionが発生するということだった。

対策:

  1. surfaceCreated()が実行されたかどうかのフラグを持つ。
  2. surfaceCreated()が実行されれば「true」。surfaceDestroyed()が実行されれば「false」。
  3. ループの中だったら、holder.lockCanvas()の実行前にフラグをチェックする。「false」ならcontinue。
  4. 念のため、CanvasののNULLチェックも実行。「false」ならcontinue。

try {
Thread.sleep(100 / level);
} catch (Exception e) {}

ループの実行間隔短い時におきやすい。アニメーションなどを実装するときには注意した方がいいかもしれない。

Write a comment