Galaxy Nexus の不思議。
SurfaceView で軽いゲームを動かすと、他の端末よりも2倍近く遅い。
drawBitmap と、少しの drawText と drawRect を行ってるだけなのに。
Android 4.0以降ならデフォルトで ON になるハードウェアアクセラレーターが
有効になっていないのかもしれない。
そして TextureView で実験してみると…こちらは他の端末での SurfaceView と
同等の速度(fps)が出る。
さらに不思議な事に、別アプリで TextureView を動かした後に SurfaceView の
アプリを起動すると…速度が2倍近く速くなる。
他の端末での SurfaceView と同等の処理速度になる。
不思議すぎる現象です。ちなみにその場合でも
Canvas.isHardwareAccelerated()
は常に false が返ってくるので、ハードウェアアクセラレーションが有効に
なっているかどうかの判定ができない。これは Nexus に限った問題では
ないけど。
SurfaceView が遅いこの現象…解決するには 4.0 以降なら TextureView の
検討。幅広く対応するなら GLSurfaceView の検討って感じでしょうか。
「TextureView を起動した直後の SurfaceView は高速化する」っていう
流れから、内部的には HW acceleration が行われているような気もしますが…
どうなってるんですかね。
0 コメント:
コメントを投稿