私は のみを使用ItemizedOverlayし、 は使用していないOverlayため、これらの提案は純粋な推測です。2D グラフィックス API については、ほとんど何もしていません。
明らかに、最善の答えは、draw()常に呼び出しを停止することです。draw()いくつかのスタック トレースをログに記録してみて、すべての呼び出しの原因を特定できるかどうかを確認してください。たとえば、最近 Android の Google グループでChronometer、同じ UI のウィジェットが毎秒再描画されることに気付いた人がいます。を持っていないことがわかりますが、修正できる呼び出しChronometerの根本的な原因を突き止めることができるかもしれません。draw()
それが役に立たないと仮定すると、「何かが変更されたかどうか」のテストは、 、 、 、およびおそらく他の方法の組み合わせであると推測しgetLatitudeSpan()てgetLongitudeSpan()いgetZoomLevel()ますMapView。draw()そして、毎回GPS ポイントを反復処理してルートを描画していると仮定しています。もしそうなら、あなたは試すことができます:
- 実際に描画するときは、最初に に
Canvas裏打ちされたに描画し、次に、渡された にBitmapを適用し、それをキャッシュします。BitmapCanvasdraw()Bitmap
- 最後の で使用された値の組み合わせを追跡し
draw()、次draw()が同じ場合は、既存の を再利用しBitmapます。それ以外の場合は、手順 1 に進み、ビットマップを解放します (可能であれば再利用します)。
グラフィックアクセラレーションを使用すると、座標を繰り返し処理して線を描画するよりも、を爆破する方が安価でBitmapあると推測しています。Canvasまた、 をキャッシュするBitmapことで、ガベージの生成を節約できます。
とにかく、ただの考えです。