2011-08-11 16 views
5

नहीं फिर से शुरू किया मैं दो क्रियाएँ कार्यवाही बार उपयोग (https://github.com/johannilsson/android-actionbar के रूप में मैं Android 2.2 लक्षित कर रहा हूं) के साथ एक एंड्रॉयड आवेदन का निर्माण कर रहा हूँ।एंड्रॉयड जब गतिविधि की ओर लौटने इसे नष्ट कर दिया जाता है और

इसमें कई गतिविधियां हैं। एक "होम" गतिविधि है, जिसे फीड कहा जाता है, और "सेटिंग्स" नामक दूसरी गतिविधि होती है।

मेरी समस्या यह है कि मैं जिस क्रिया बार का उपयोग कर रहा हूं उसके नमूने में दिए गए createIntent फ़ंक्शन का उपयोग कर रहा हूं, फिर भी गतिविधि फिर से शुरू हो जाती है जब उपयोगकर्ता फ़ीड गतिविधि पर वापस जाने के लिए होम बटन टैप करता है ।

कुछ डिबगिंग के साथ मैंने पाया कि यह नष्ट हो रहा है, न कि गतिविधि को पहले रोका और बंद कर दिया गया था, लेकिन जब इसे फिर से शुरू करने का अनुरोध होता है।

public static Intent createIntent(Context context) 
{   
    Intent i = new Intent(context, Feed.class);   
    i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);   
    return i;  
} 

यह एक बहुत बड़ी झुंझलाहट है, और काफी आवेदन धीमा के रूप में यह फ़ीड के लिए अपने डेटा को फिर से लोड करने के लिए है (जो कैश किया गया है, लेकिन इसकी डेटा प्राप्त करने के तत्काल नहीं पुनः लोड)।

तो मैं इस व्यवहार से कैसे बच सकता हूं? और यह क्यों हो रहा है, क्योंकि मेरा मानना ​​है कि अतिरिक्त ध्वज इस व्यवहार को रोकना चाहिए।

उत्तर

4

आप उपयोग करना चाहते हैं

तो एक आशय Context.startActivity() के लिए पारित में सेट, इस ध्वज शुरू की गतिविधि का कारण होगा अपने कार्य के इतिहास स्टैक के सामने लाया गया है यदि यह पहले से चल रहा है।

उदाहरण के लिए, चार गतिविधियों में से एक कार्य पर विचार करें: ए, बी, सी, डी।यदि डी कॉल एक्टिविटी() को उस उद्देश्य के साथ शुरू करता है जो 0 बीगतिविधि बी के घटक को हल करता है, तो बी को इतिहास स्टैक के सामने लाया जाएगा, जिसके परिणामस्वरूप ऑर्डर: ए, सी, डी, बी। यह ध्वज होगा अगर FLAG_ACTIVITY_CLEAR_TOP भी निर्दिष्ट किया गया है तो अनदेखा किया जाए।

public static Intent createIntent(Context context) 
{   
    Intent i = new Intent(context, Feed.class);   
    i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);   
    return i;  
} 
1

निर्भर करता है जिस पर वर्ग लॉन्च कर रहा है क्या, तुम कहाँ अपनी गतिविधि का एक नया उदाहरण शुरू किया जा रहा है और पुराने वाले को नष्ट किया जा रहा है कोई समस्या आ रही हो सकता है। यह वही है प्रलेखन कहते है के बारे में FLAG_ACTIVITY_CLEAR_TOP:

यदि इसे सेट और शुरू किया जा रहा गतिविधि पहले से ही वर्तमान कार्य में, फिर, अन्य गतिविधियों के सभी के शीर्ष पर चल रहा है के बजाय कि गतिविधि का एक नया उदाहरण की शुरूआत यह बंद हो जाएगा और यह इरादा एक नए इरादे के रूप में (अब शीर्ष पर) पुरानी गतिविधि को दिया जाएगा।

सूचना है कि यह कहते हैं, "अगर गतिविधि शुरू किया जा रहा पहले से ही वर्तमान कार्य में चल रहा है ..." तो मुझे यकीन है कि नहीं कर रहा हूँ, लेकिन यह मतलब होता अगर अपने डिबगिंग गतिविधि है कि आप से पता चला है भी नष्ट किया जा रहा है।

डीबगिंग करते समय, क्या आप अपनी कक्षा वस्तुओं के लिए "आईडी" संख्या देख रहे हैं? अपनी कक्षा के onCreate() और onDestroy() दोनों में ब्रेकपॉइंट सेट करें और प्रत्येक के अंदर कक्षा की आईडी देखें। यदि वे अलग हैं, तो आप जानते हैं कि आपके पास अपनी गतिविधि के दो अलग-अलग उदाहरण हैं।

एक पक्ष नोट/प्रश्न के रूप में, आप कैसे "को लक्षित" कर रहे हैं 2.2 यदि ActionBar 3.0 तक उपलब्ध नहीं बनाया गया था? एंड्रॉयड docs से

FLAG_ACTIVITY_REORDER_TO_FRONT 

उद्धरण::

+1

मुझे लगता है कि ActionBar वह उपयोग कर रहा है एक घर बना संस्करण 3.0 :) में नज़र अनुकरण करने के लिए है। मैंने इसे स्वयं इस्तेमाल किया है और यह काफी अच्छा काम करता है। – Jack

+0

मैंने ब्रेकपॉइंट्स सेट किए और आईडी की निगरानी की, और यह वही आईडी है, जब तक कि मैं इसे नष्ट करने के बाद गतिविधि पर वापस लौटने की कोशिश नहीं करता (फिर आईडी का परिवर्तन), लेकिन जब इरादा कहा जाता है तो यह नष्ट हो जाता है। मुझे लगता है कि समस्या को रोकने की गतिविधि से संबंधित है, इसलिए यह नहीं चल रहा है, और यही कारण है कि यह नष्ट हो जाता है और फिर से बनाया जाता है। – lloydsparkes

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