2013-01-22 18 views
5

Tôi đang sử dụng api Google maps v2 cho ứng dụng Android mà tôi đang xây dựng để vẽ hình đa giác trên bản đồ. Mọi thứ hoạt động tốt khi số lượng đa giác nhỏ, khi con số lớn hơn bản đồ tải chậm và việc thu phóng và thu phóng rất chậm. Tôi đang sử dụng SupportMapFragment và thêm đa giác như sau:Sự cố hiệu suất đa giác trên Android Google Maps v2?

for(PolygonOptions item : items) { 
      getMap().addPolygon(poly); 
    } 

Có cách nào để cải thiện hiệu suất cho một số lượng lớn các đa giác không?

+0

Theo như tôi biết, quá trình này PHẢI được thực hiện KHÔNG trong chuỗi chính, NHƯNG trong Chủ đề riêng biệt hoặc AsyncTask. Nếu bạn không sử dụng Thread (sử dụng Handler) hoặc lớp AsyncTask trong mã của bạn, các công cụ của chúng được yêu cầu trước. – BBonDoo

+2

Nó thực sự là một yêu cầu để gọi addPolygon từ chủ đề chính. API bản đồ sẽ ném một IllegalStateException vì không nằm trên luồng chính khi gọi addPolygon từ một chuỗi nền. – Bobbake4

+0

@ Bobbake4 bạn đã giải quyết được vấn đề của mình chưa? Tôi có cùng một vấn đề nếu bạn tìm thấy giải pháp xin vui lòng cho tôi biết –

Trả lời

0

Bobbake4 là chính xác. Android yêu cầu addPolygon phải nằm trên chuỗi chính. Tôi cũng có một vấn đề tương tự. Hiện nay tôi đang thực hiện AsyncTask nhưng có vẻ không phải là một cách để thực hiện addPolygon từ doInBackground mã hiện tại của tôi là dưới đây:

private class AddPolygonToMap extends 
     AsyncTask<String, Integer, ArrayList<PolygonOptions>> { 

    @Override 
    protected ArrayList<PolygonOptions> doInBackground(String... urls) { 
     publishProgress(1); 
     return drawPolygonWithPage(urls[0]); 
    } 

    @Override 
    protected void onProgressUpdate(Integer... progress) { 
     int value = progress[0] + progressBar.getProgress(); 
     progressBar.setProgress(value); 
    } 

    @Override 
    protected void onPostExecute(ArrayList<PolygonOptions> result) { 
     for (int i = 0; i < result.size(); i++) { 
      map.addPolygon(result.get(i)); 
     } 
    } 
} 

Lý tưởng nhất là tôi muốn nền addPolygon ... Có cách nào khác nhận được Điều này đã xong?

1

Tôi cũng muốn vẽ nhiều đa giác trên bản đồ dưới nền vì tải và lắp ráp các đỉnh cần có thời gian. Giải pháp làm việc cho tôi là tải dữ liệu trong AsyncTask rồi chuyển các điểm cho mỗi đa giác khi nó được đọc ngược lại một phương thức trong giao diện người dùng chính trong phương thức onProgressUpdate.

private class AddZonesTask extends AsyncTask<Zone, Zone, Integer> { 
    protected Integer doInBackground(Zone... zones) { 
    for (Zone zone : zones) { 
     Cursor cursor = provider.query(....); 
     List<Points> points = cursorToPointsMethod(cursor); 
     zone.add(points); 
     publishProgress(zone); 
    } 
    return zones.length; 
    } 

    protected void onProgressUpdate(Zone... zones) { 
    drawBorder(zones[0]); 
    } 

    protected void onPostExecute(Integer result) { } 
} 

Nơi drawBorder trong giao diện người dùng chính sau đó thêm chúng vào đối tượng bản đồ.