2011-02-25 14 views
14

यह अच्छी तरह से किसी Android ऐप्लिकेशन में गूगल मैप्स का उपयोग कर लोगों की है कि वे केवल एक ही MapActivity प्रक्रिया के अनुसार उपयोग कर सकते हैं पता है। एक अलग प्रक्रिया में प्रत्येक MapActivity डालने के कामकाज के साथ bug discussing this in detail है। मैं अपने ऐप में कुछ कारणों से ऐसा नहीं करना चाहता हूं और काम करने के लिए एक और कामकाज विकसित किया है।तकनीक

प्रत्येक Activity कि एक नक्शे में शामिल है के लिए, मैं यह ActivityGroup का विस्तार करने और बनाने/एक बच्चे गतिविधि के रूप में नष्ट onResume/ MapActivity में है। यह वहाँ एक बार में केवल एक MapActivity का एक उदाहरण हो जाएगा सुनिश्चित करता है (यह मानते हुए कि आप एक Activity है एक समय में दिखा)।

public class MyMapActivityGroup extends ActivityGroup { 

    @Override 
    protected void onResume() { 
     super.onResume(); 

     addMapView(); 
    } 

    @Override 
    protected void onPause() { 
     super.onPause(); 

     removeMapView(); 
    } 

    private void addMapView() { 
     Intent intent = new Intent(this, MyMapActivity.class); 
     Window window = getLocalActivityManager().startActivity("map", intent); 
     setContentView(window.getDecorView()); 
    } 

    private void removeMapView() { 
     setContentView(new FrameLayout(this)); 
     getLocalActivityManager().removeAllActivities(); 
    } 

} 

MapActivity मैं उपयोग कर रहा हूँ कुछ खास नहीं है और किसी भी संशोधन की आवश्यकता नहीं है: नीचे मेरी कार्यान्वयन का एक सरलीकृत संस्करण है। यह सिर्फ अपनी सामग्री दृश्य के रूप में MapView सेट करता है।

यह मेरे लिए अच्छा काम करने लगता है। लेकिन क्या ऐसा करने के लिए कोई नकारात्मक पक्ष है? मैप युक्त गतिविधियों के बीच जाने पर मेरी मुख्य चिंता एक स्मृति रिसाव है।

उत्तर

1

मुझे लगता है कि यही एकमात्र कारण यह प्रदर्शन किया जाएगा ऐसा नहीं होगा। नक्शा गतिविधि पहले से ही एक कुत्ते का थोड़ा सा हो सकता है, खासकर जब इसे शुरू करते हैं, तो यदि आप अक्सर दृश्य को आवंटित और डिलीकेट करते हैं, तो यह बहुत खराब प्रदर्शन कर सकता है। हालांकि, यह वास्तव में इस बात पर निर्भर करता है कि दृश्य कितनी बार बनाया जाएगा और हटा दिया जाएगा, जो पूरी तरह से आपके आवेदन के व्यवहार पहलुओं पर निर्भर करता है।

+0

मैं भी इस बारे में चिंतित था, लेकिन यह वास्तव में काफी बेहतर की तुलना में मैंने सोचा कि यह होगा प्रदर्शन करती है। 'MapActivity' को उस स्मृति को रखना चाहिए जो इसे स्मृति में प्रारंभिक रूप में करता है। और आपको एक अलग प्रक्रिया में प्रत्येक 'MapActivity' डालने के विकल्प के खिलाफ भी इस तकनीक का वजन करना होगा। –

+0

ठीक है मैपएक्टिविटी क्या करता है। यह लाइब्रेरी द्वारा प्रबंधित डिवाइस कैश पर कुछ प्रकार के पुनः उपयोग करने योग्य शुरू होता है। पुष्टि करने के लिए खुश है कि यह ठीक काम करता है। –

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