SurfaceView
ハンドルが表示領域の外側にどのように描画されるかを自問していました。私はいくつかのオンライン調査を行いましたが、質問する人や質問に答える人を見つけることができませんでした。そこで、いくつかのテストを行いました。テストのセットアップは次のようになります。
SurfaceView
x軸のオフセットが-100で、1000個の円ごとに-100のオフセットが追加された5000個の円を描画します。オフセットはMatrix
変換としてに保存され、を使用して描画する前にキャンバスに適用されますCanvas.concat()
。その結果SurfaceView
、5000個の円が描画されますが、最初はすべて表示領域の外側にあり、画面には表示されません。テストアプリケーションを実行し、に変換を適用しCanvas
て、円のスタックが次々に表示されるようにし、1秒あたりのフレーム数を測定しました。すべての更新と描画は、可能な限り頻繁にループする単純なスレッドを使用して行われます。
測定結果は次のとおりです。
- 0個の表示された円->〜40 FPS
- 1000個の可視円->〜30 FPS
- 2000個の可視円->〜20 FPS
- 3000個の可視円->〜15 FPS
- 4000個の可視円->〜12 FPS
- 5000個の可視円->〜10 FPS
これはすべて私自身の2Dエンジンを使用して行われていることを言及する必要があります。要素がない場合は、60FPSで動作します。最初の「欠落した」20FPSは、5000要素を反復するレンダリングパイプラインが原因である可能性があると思います。
誰かがSurfaceView
またはについてもっと知っていて、Canvas
この振る舞いを説明できますか?
前もって感謝します!
テストセットアップ:Nexus 10、Android 4.2.1、最小SDK:14、ターゲットSDK:17