2015-06-08 92 views
0

我有一個ArrayList:GoogleMap.addGroundOverlay()需要花費大量的時間UiThread

ArrayList<GroundOverlayOptions> goArray; 

- 約2-3k的元素。 當我嘗試這樣顯示的:

for (GroundOverlayOptions temp : goArray) { 
    map.addGroundOverlay(temp); 
} 

需要花費大量的時間UiThread(約10-15s),它創造ANR錯誤。 map.addGroudOverlay()必須在UiThread上運行。 有沒有解決這個問題的方法? goArray的

內容:

float longitude, float latitude, float width,float height, int color 
{ 
final Bitmap bitmap = Bitmap 
      .createBitmap(1, 1, Bitmap.Config.ARGB_8888); 
    bitmap.setPixel(0, 0, color); 
    final BitmapDescriptor image = BitmapDescriptorFactory 
      .fromBitmap(bitmap); 
    final LatLngBounds bounds = new LatLngBounds(new LatLng(latitude 
      - height/2, longitude - width/2), new LatLng(latitude 
      + height/2, longitude + width/2)); 
    long startTime = System.currentTimeMillis(); 
    GroundOverlayOptions go = new GroundOverlayOptions().image(image) 
      .positionFromBounds(bounds).transparency(0.33f); 
    goArray.add(go); 
} 

回答

0

你爲什麼不嘗試的AsyncTask這樣做呢?

private class MapTask extends AsyncTask<GroundOverlayOptions, Integer, Void> { 
    protected Void onPreExecute() { 
     //Use something like ProgressBar to keep user informed 
    } 

    protected Void doInBackground(GroundOverlayOptions... maps) { 
     //Will need to use maps[0] 
     //because that method treat this param as an Array 
     for (GroundOverlayOptions temp : maps[0]) { 
      map.addGroundOverlay(temp); 
     } 

     return null; 
    } 

    protected void onProgressUpdate(Integer... progress) { 
     //Update ProgressBar 
    } 
} 

,你在做循環調用的AsyncTask來處理這種情況的發生。 通過goArrayAsyncTask

new MapTask().execute(goArray); 
+0

不工作 - '致:java.lang.IllegalStateException:不就在com.google.lace.b(來源不明) 在com.google.maps.api.android主線程 。 lib6.d.ct.a(Unknown Source) at com.google.maps.api.android.lib6.d.ft.a(Unknown Source)' – msc3

+0

我正在閱讀的一件事是關於_TileOverlay_和_GroundOverlay_,它看起來像喜歡_TileOverlay_更適合這樣做。 您是否考慮過使用_TileOverlay_而不是_GroundOverlay_?我可以看到您正在使用循環語句爲goArray分配一些值,然後在一個接一個地加載。可能你有多個循環,考慮使用另一個線程來處理所有的循環。也許這就是你拖延的起點。您可以發佈完整的代碼(與問題有關)和完整的堆棧跟蹤。 –

相關問題