2016-11-02 3 views
1

私はGoogleMapsV2を使用しています。私はClusterManager(ClusterManager.addItems(Collection))に一括して追加する10,000個のクラスタ項目があります。クラスタで多数のClusterItemを処理する方法 - Android GoogleマップV2

私の問題は、クラスタリングとデ・クラスタリングの処理が遅く、遅いことです。 。。周りに10 000項目に(6ギガバイトまたはラムと)OnePlus3でのテストので、それは携帯電話ではありません。ここ

は、クラスタでの活動でコードを関連付ける:

// Rent markers 
rentMarkerList = new ArrayList<>(); 
rentClusterManager = new ClusterManager<OffersMarker>(this, gmap); 
rentClusterRenderer = new OffersClusterRenderer(this, gmap, rentClusterManager); 
    rentClusterManager.setRenderer(rentClusterRenderer); 

for (AdMarker adMarker : adsArray) { //<-- adsArray.size() = 6500 
    OffersMarker offsetItem = makeOffersMarker(adLocation, nrOfAds, realEstateAdIds, OffersMarker.DEALTYPE.SALE_CODE); 
    rentMarkerList.add(offsetItem); 
} 

// Do bulk add of Markers into ClusterManager. 
rentClusterManager.addItems(saleMarkerList); 
rentClusterManager.cluster(); 

私は私のClusterRendererの上に行って、私は行っておりませんonBeforeClusterItemRendered()およびonBeforeClusterRendered()の大規模操作。 これは、クラスタリングを行う場合、クラスタリングはクラスタ化されていない場合よりもはるかに低速ですが、通常はクラスタリングがはるかに小さいズームレベルで行われるため、マーカーが多く表示されることもあります。

私のアンドロイドモニタは、グラフィックスの問題ではないので、クラスタリングプロセスによってメモリとCPUが変更され、GPUは変更されないことが示されます。

解決方法私は試しました:のような動的クラスタレンダリングを行う。この場合、マーカリストをループして、Viewport境界にあるものを確認し、それらのマーカーのみを表示します。これは、onCameraIdle ...が呼び出されるたびに10 000のマーカーすべてをループしなければならなかったため、全体的に悪化しました。

この問題の最適化はどこから始めるのですか?

答えて

1

rentMarkerListは他にもありますか?ない場合は、この方法でコードをリファクタリングすることができます

rentClusterManager = new ClusterManager<OffersMarker>(this, gmap); 
rentClusterRenderer = new OffersClusterRenderer(this, gmap, rentClusterManager); 
rentClusterManager.setRenderer(rentClusterRenderer); 

for (AdMarker adMarker : adsArray) { //<-- adsArray.size() = 6500 
    rentClusterManager.addItem(makeOffersMarker(adLocation, nrOfAds, realEstateAdIds, OffersMarker.DEALTYPE.SALE_CODE)); 
} 

rentClusterManager.cluster(); 

だから、マーカーの追加のリストを作成しないと同時に、それらをすべて追加しませんが、それらを一つずつ追加します。

また、単純なforループでforeachループを再現することもできます。このAndroid performance patterns episodeによれば、より速く動作します。

パフォーマンスが大幅に向上するとは思っていませんが、最適化のヒントが少なくて済むかもしれません。

関連する問題