8

मेरे ऐप में कई टुकड़े और गतिविधियां हैं। मुख्य अभिभावक गतिविधि के जीवन चक्र के दौरान, ऐप अन्य गतिविधियों में उपयोगकर्ता को जानकारी/विकल्प प्रस्तुत करता है।जब आप मूल गतिविधि की स्थिति को सहेजने के लिए बाध्य होते हैं तो आप खंड लेनदेन को कैसे संभालेंगे?

टुकड़े के लिए प्रलेखन है निम्नलिखित शर्त के लिए प्रतिबद्ध():

सावधानी: आपको किसी लेन-देन गतिविधि अपने राज्य को बचाने के लिए प्रतिबद्ध() केवल पहले का उपयोग कर के लिए प्रतिबद्ध कर सकते हैं (उपयोगकर्ता गतिविधि छोड़ देता है जब) । यदि आप उस बिंदु के बाद प्रतिबद्ध करने का प्रयास करते हैं, तो एक अपवाद फेंक दिया जाएगा। ऐसा इसलिए है क्योंकि यदि गतिविधि को बहाल करने की आवश्यकता है तो प्रतिबद्धता के बाद राज्य खो जा सकता है। ऐसी परिस्थितियों के लिए जिसमें आप प्रतिबद्धता खो देते हैं, प्रतिबद्धता का उपयोग करें StowLoss()।

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

एक समाधान मैंने सोचा है कि मेरी गतिविधियों को टुकड़ों में बदलना है, हालांकि मेरा ऐप अंततः ऐप-ऐप बिलिंग का उपयोग करेगा जो मुझे विश्वास है कि हमेशा अपनी गतिविधि शुरू करेगा। यह एक विशाल प्रतिबंध की तरह लगता है - विकास में किसी बिंदु पर मैं एक अलग गतिविधि प्रदर्शित करना समाप्त कर दूंगा।

मैं संभवतः commitAllowingStateLoss() का उपयोग कर दूर हो सकता हूं, लेकिन मुझे लगता है कि मुझे एंड्रॉइड टैबलेट ऐप विकास में एक प्रमुख अवधारणा याद आ रही है। क्या गतिविधियों को शुरू करने का कोई तरीका है, फिर फ्रैगमेंट ट्रांस्सेक्शन को प्रतिबद्ध करने की क्षमता खोने के बिना मूल गतिविधि (जो टुकड़े प्रबंधित करता है) पर वापस आ जाता है?

+1

इसे पढ़ना [** ब्लॉग पोस्ट **] (http://www.androiddesignpatterns.com/2013/08/fragment-transaction-commit-state-loss.html) मदद कर सकता है। –

उत्तर

3

जब आप अपनी मूल गतिविधि को फिर से शुरू/शुरू कर देते हैं तो भी आप विखंडन लेनदेन कर सकते हैं, भले ही इसे पिछले रोका गया हो। दस्तावेज़ों का केवल मतलब है कि आप उस अवधि के दौरान प्रतिबद्ध नहीं हो सकते हैं जहां गतिविधि रोक दी गई है (और राज्य बचाया गया है) और इसे फिर से शुरू करने से पहले। यदि आप किसी अन्य गतिविधि पर जाने के बाद अपनी मूल गतिविधि पर वापस आते हैं, तो आप Activity.onStart() कहने के बाद फिर से खंड लेनदेन का उपयोग करने के लिए स्वतंत्र हैं।

इस प्रतिबंध का कारण यह है कि एंड्रॉइड Activity.onSaveInstanceState() के दौरान गतिविधि से जुड़े टुकड़ों की स्थिति बचाता है। यदि आप इस बिंदु के बाद खंड लेनदेन करने का प्रयास करते हैं, तो अगर आपको एंड्रॉइड को पुनर्निर्मित करने की आवश्यकता है, तो उस स्थिति को पुनर्स्थापित करने के लिए आपको राज्य हानि के संपर्क में लाया जाएगा (क्योंकि गतिविधि की स्थिति को फिर से बनाने के लिए उपयोग की जाने वाली जानकारी केवल वह डेटा था जो Activity.onSaveInstanceState() में कैद की गई थी)।

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

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