[英]Google Maps Android API v2 doesn't show up in my Developer's Console
[英]Google Maps v2 addPolygon() plugs up UI thread so my progress dialog doesn't animate
我正在開發一個應用程序,在該應用程序中,我希望能夠將多達10,000個多邊形(40,000個緯度/經度對)加載到Google Maps v2上,並且性能幾乎可以接受。 但是由於加載大約需要20秒,因此我需要有一個進度指示器,以使它看起來好像應用程序沒有鎖定。
我相信核心問題是我必須重復10,000次並且必須在UI線程上運行的map.addPolygon(polygonOptions)調用會堵塞UI線程,這樣進度對話框就沒有時間更新其UI。 這是我的代碼的近似值:
@Override
protected void onCreate(.....) {
progressDialog = new ProgressDialog(AllLayersActivity.this);
progressDialog.setMessage("Processing files:");
progressDialog.setTitle("Loading data");
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setProgress(0);
progressDialog.setMax(1);
progressDialog.show();
progressDialog.incrementProgressBy(1);
for(String filename : intent.getStringArrayListExtra(DbxService.PARAM_FILES)) {
if(filename.toLowerCase(Locale.getDefault()).endsWith(".shp")) {
dbxService.getFileContents(new DbxPath(pathToField + filename));
}
}
}
BroadcastReceiver for dbxService.getFileContents() {
new Thread(new Runnable() {
@Override
public void run() {
byte[] fileContents = loadFromBroadcastIntent(.....);
progressDialog.setMax(progressDialog.getMax() + getNumberOfParts(fileContents));
// bunch of other processing
for(Part part : getParts(fileContents) {
final PolygonOptions polygonOptions = new PolygonOptions();
// processing stuff
polygonOptions.addAll(latLngList);
runOnUiThread(new Runnable() {
public void run() {
map.addPolygon(polygonOptions);
progressDialog.incrementProgressBy(1);
if(progressDialog.getProgress() == progressDialog.getMax()) {
progressDialog.dismiss();
}
}
});
}
}
}).start();
}
我知道即時增加ProgressDialog的最大值可能看起來有點怪異,但我認為它在實踐中應該可以很好地工作,因為progressDialog.setMax(progressDialog.getMax() + parts);
該行的運行次數比progressDialog.incrementProgressBy(1);
少很多倍progressDialog.incrementProgressBy(1);
行,總是在對話框可能錯誤地達到100%之前添加更多,並且應該很快增加到其最終值,因為map.addPolygon(polygonOptions);
到目前為止,這是我做得最慢的事情。
那么,我該怎么做才能讓進度條很好地進行動畫處理?
我將添加此內容作為評論,但我的代表不到50個,所以還不能。 話雖如此,我有一個應用程序可以在地圖上添加多達10,000個標記,而我遇到了同樣的問題。 我嘗試在另一個線程中添加標記,但是必須在UI線程中將項目添加到地圖中,該UI線程與progressDialog相同。 因此,簡短的答案是“否”。如果在那里有人比我更聰明,那么可以在AsyncTask或Runnable中做到這一點,那么請讓我知道!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.