多くのオーバーレイ アイテムを処理するロケーション ベースの Android アプリを開発しています。
背景: マップ上に表示したいエンティティがかなりあります。エンティティの座標は、位置が変わるとリアルタイムで変化します。更新された位置に対応して、エンティティはマップ上で更新されます。エンティティは多数に成長する可能性があります。
実装 2 つのオーバーレイがあります。1 つは MyLocationOverlay がユーザーの位置を表示するためのもので、もう 1 つは、マップに表示する必要があるすべてのエンティティを含む ItemizedOverlay サブクラスです。
問題 エンティティの場所が変更されるたびに、対応するオーバーレイ項目を更新する必要があります。問題は、これを達成するための最良の方法がわからないことです。私にはこれらの選択肢があります
特定のエンティティの位置を受け取ると、マップからすべてのオーバーレイを削除し、オーバーレイを再度追加します。オーバーレイアイテムの 1 つが更新された場所で作成されました。
List<Overlay> overlays = map.getOverlays(); overlays.removeAll(overlays); overlays.add(new MyOverlay(marker,this));
エンティティごとにオーバーレイを作成します。つまり、それぞれが 1 つのオーバーレイ アイテムのみを含む 500 個のオーバーレイを作成します。Overlay クラスのサブクラスを作成し、独自のプロパティを追加してエンティティを明確に識別し、それぞれに 1 つ作成します。特定のエンティティの場所の更新に到達すると、特定のオーバーレイ アイテムを反復して取得し、それを削除して、場所が更新された新しいアイテムを追加します。
パフォーマンスに関しては、どちらを使用するのが最適かわかりません。
エンティティの数が 500 または 1000 を超えると、すべてのエンティティのすべての位置情報更新 (頻繁に発生する可能性があります) ごとにすべてのオーバーレイを削除して再度追加することは、かなりのオーバーヘッドになると思います。
同時に、同じ数のエンティティを反復することも、同じオーバーヘッドになる可能性があります。
どちらを選択するか、またはこれを実装するためのより良い方法についてのアドバイスをいただければ幸いです。
/アンディ