2013-01-22 20 views
5

मैं एक Android आवेदन के लिए Google maps v2 एपीआई का उपयोग कर रहा मैं इमारत के नक्शे पर बहुभुज आकर्षित करने के लिए है जो कर रहा हूँ। सब कुछ ठीक काम करता है जब बहुभुज की संख्या, छोटा है जब संख्या बड़े नक्शे धीरे-धीरे लोड और पैनिंग और संभवत: ज़ूम वास्तव में धीमी है। मैं SupportMapFragment और जोड़ने बहुभुज का उपयोग कर रहा इस तरह:एंड्रॉइड Google मानचित्र v2 बहुभुज प्रदर्शन समस्या?

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

वहाँ बहुभुज की एक बड़ी संख्या के लिए प्रदर्शन में सुधार करने कोई तरीका है?

+0

जहाँ तक मुझे पता है, इस प्रक्रिया को मुख्य थ्रेड में नहीं किया जाना चाहिए, लेकिन अलग थ्रेड या AsyncTask में। यदि आप अपने कोड में थ्रेड (हैंडलर का उपयोग करके) या AsyncTask क्लास का उपयोग नहीं करते हैं, तो उनके उपकरण पहले से ही आवश्यक हैं। – BBonDoo

+2

यह वास्तव में एक आवश्यकता मुख्य थ्रेड से addPolygon कॉल करने के लिए है। नक्शा एपीआई एक पृष्ठभूमि धागे से addPolygon बुलाते समय मुख्य धागे पर नहीं होने के लिए एक IllegalStateException फेंक देगा। – Bobbake4

+0

@ बॉबबेक 4 क्या आपने अपनी समस्या का समाधान किया? अगर आपको समाधान मिल जाए तो मुझे एक ही समस्या है कृपया मुझे बताएं –

उत्तर

0

Bobbake4 सही है। एंड्रॉइड को मुख्य थ्रेड पर जोड़ने के लिए addPolygon की आवश्यकता होती है। मेरे पास भी एक समान समस्या है। होने का कोई दूसरा रास्ता नहीं

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)); 
     } 
    } 
} 

आदर्श रूप में मैं addPolygon पृष्ठभूमि चाहते हैं ... वहाँ है: वर्तमान में मैं asynctask को लागू कर रहा हूँ लेकिन वहाँ doInBackground मेरे वर्तमान कोड से addPolygon प्रदर्शन करने के लिए एक तरीका हो प्रतीत नहीं होता है नीचे है यह किया?

1

मैं इसलिए भी कि लदान और कोने कोडांतरण समय लगता है पृष्ठभूमि में नक्शे पर अधिक बहुभुज आकर्षित करने के लिए चाहते हैं। मेरे लिए काम किया गया समाधान AsyncTask में डेटा लोड करना था, फिर प्रत्येक पॉलीगॉन के लिए अंक पास करना था क्योंकि इसे ऑनप्रिशनअपडेट विधि में मुख्य UI में किसी विधि को वापस पढ़ा जाता है।

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) { } 
} 

जहां मुख्य यूआई में drawBorder तब उन्हें मानचित्र ऑब्जेक्ट में जोड़ता है।

संबंधित मुद्दे