我正在開發一個基於位置的android應用程序,它處理很多覆蓋項目。如何動態更新特定的overlayitem
背景: 我想在地圖上顯示不少實體。實體的座標隨着其位置變化而實時變化。對應於更新的位置,實體應在地圖上更新。實體可以增長到很多。
執行 我有兩個覆蓋。一個用於顯示用戶位置的MyLocationOverlay,另一個用於顯示我需要在地圖上顯示的所有實體的ItemizedOverlay子類。
問題 每當實體的位置發生變化時,相應的overlayitem需要更新。問題是我不確定哪個是完成這個最好的方法。我有這些選擇
當我收到特定實體的位置時,我從地圖中刪除所有疊加層並重新添加疊加層。現在使用更新的位置創建了一個疊加項目。
List<Overlay> overlays = map.getOverlays(); overlays.removeAll(overlays); overlays.add(new MyOverlay(marker,this));
我爲每個實體創建一個覆蓋。這意味着我將創建500個疊加層,每個疊加層只包含一個疊加層項目。我創建了一個Overlay類的子類,並添加了我自己的屬性以清楚地標識實體併爲其創建一個。當我到達特定實體的位置更新時,我迭代並獲取特定的覆蓋項目,將其刪除並添加一個具有更新位置的新項目。
我不知道哪一個是最好的使用性能明智的。
我覺得移除所有並重新添加爲每一個位置更新所有覆蓋(這是相當常見)每一個實體的成爲當實體數量變得相當的開銷超過500或1000
與此同時,迭代相同數量的實體也可能會產生相同的開銷。
任何意見可以選擇哪一個或更好的方法來實現這一點,將不勝感激。
/安迪
因此,你建議創建一個自定義覆蓋類,並讓我所有的實體繪製?哪一個會有更好的表現 - 一個自定義的覆蓋類,就像你建議的所有500個實體或類似的自定義覆蓋類,每個實體一個(將有500個自定義覆蓋類的對象) – andy 2012-07-23 17:58:32
我相信自從沒有明確的答案以來這取決於自定義覆蓋類的實現。如果我想確保性能,我會爲這兩個appraches實現一個簡單的測試用例,並查看哪個具有最佳性能。 – Angelo 2012-07-24 07:03:57