2010-12-27 7 views
7

मैं अपने गतिविधियों के कुछ के लिए android:configChanges="orientation|keyboardHidden" उपयोग करने के लिए इतना है कि मेरी onCreate फिर से बुलाया नहीं प्राप्त करता है चाहता हूँ, लेकिन मैंने सोचा था कि क्योंकि this link कहना है कि यह केवल चाहिए मैं अगर किसी को भी पेशेवरों और पहले विपक्ष की एक सूची थी देखना चाहते हैं एक अंतिम उपाय के रूप में इस्तेमाल किया जाना चाहिए।एंड्रॉइड उपकरणों के लिए configChanges = "अभिविन्यास" का उपयोग करने के पेशेवर और विपक्ष क्या हैं?

उत्तर

5

इस दृष्टिकोण का उपयोग कर का एक बड़ा समर्थक है कि यह अपनी ओर से बहुत कम प्रयास की आवश्यकता है, और यदि आपका ऐप्स क्रैश का सहारा के बिना config परिवर्तन बच जाएगा कि है।

छोटे दोष यह है कि (लैंडस्केप या पोर्ट्रेट ओरिएंटेशन के लिए) विन्यास विशिष्ट संसाधनों का उपयोग कर स्वचालित रूप से लागू नहीं मिलता है।

मेरे (शायद छोटे) अनुभव में, मुझे लगता है कि यह वास्तव में सभी नलसाजी करने के प्रयास के लायक नहीं है।

"उचित" इन config परिवर्तन से निपटने अपनी ओर से पाइपलाइन का एक बहुत आवश्यकता है, और आप स्क्रीन अभिविन्यास परिवर्तन के दौरान प्रगति संवाद का समर्थन करने के लिए है, तो चीजों को और भी अधिक नाटकीय मिलता है।

हालांकि अधिकांश लोग मैनिफेस्ट को बदलकर त्वरित गति का चयन करेंगे, और एंड्रॉइड के साथ अपनी गतिविधि को कॉन्फ़िगर करेंगे: configChanges = "keyboardHidden | ओरिएंटेशन", मुझे लगता है कि यह समझना महत्वपूर्ण है कि इसके विकल्प हैं।

इसे और कोड की आवश्यकता है, लेकिन यह आपको समग्र प्रणाली कैसे काम करता है इस बारे में बेहतर अंतर्दृष्टि प्रदान करता है।

6

यह अजीब है कि गूगल वास्तव में उसके पीछे के तर्कों के बारे में अधिक बात नहीं करता है, लेकिन वहाँ वास्तव में तीन मुख्य कारणों से मैं के बारे में सोच सकते हैं कि दृष्टिकोण का उपयोग कर से बचने के लिए कर रहे हैं:

  • मेरे अनुभव में, कुछ दृश्य प्रकार (विशेष रूप से एंड्रॉइड 2.1 या उससे कम पर वेबव्यू और मैप व्यू) अभिविन्यास परिवर्तन के बाद अजीब तरीके से व्यवहार कर सकते हैं अगर उन्हें पुनर्निर्मित नहीं किया गया है (उदाहरण के लिए ज़ूम बटन गलत तरीके से)।
  • यह आपको ओरिएंट-विशिष्ट लेआउट का उपयोग करने से रोकता है (उदाहरण के लिए, नया मार्केट ऐप का लैंडस्केप व्यू देखें)।
  • यह आपको आपके गतिविधि से नष्ट होने और पुनर्निर्मित होने के अन्य कारणों से संबंधित आपके आवेदन से छोटी गाड़ी व्यवहार की खोज से बचा सकता है (उदाहरण के लिए कम स्मृति या पृष्ठभूमि के दौरान अन्य सामान्य हत्याएं)। यही है, अगर आपकी गतिविधि रोटेशन के कारण पुनरारंभ करने के लिए गहन रूप से संभाल सकती है, तो यह पृष्ठभूमि-हत्या के कारण शायद पुनरारंभ कर सकती है। यदि आप हैंडलिंग रोटेशन को छोड़ते हैं, हालांकि, सामान्य परीक्षण के तहत पृष्ठभूमि-हत्या के कारण आपको पुनरारंभ नहीं हो सकता है जब तक कि एक पुराने लो-मेमोरी फोन वाले उपयोगकर्ता को बग रिपोर्ट के साथ लिखना न पड़े।

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

यदि आप घूर्णन निगलने का निर्णय लेते हैं तो मैं हमेशा Development.apk की "तुरंत गतिविधियों को नष्ट करने" विकल्प के साथ एक एमुलेटर या डिवाइस का उपयोग करने की सलाह देता हूं, और फिर यह सुनिश्चित कर रहा हूं कि स्विचिंग ऐप्स या आपके कार्य स्टैक के माध्यम से बैकिंग अभी भी सही तरीके से काम करे।

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

+0

वेबव्यू के बारे में, यह समस्याग्रस्त है क्योंकि यदि आप लोड करते समय अभिविन्यास बदलते हैं, तो यह लोडिंग को पुनरारंभ करेगा। जैसा कि मैंने पढ़ा है, आप अपने राज्य को पुनर्स्थापित नहीं कर सकते (और यह दस्तावेज़ों में भी लिखा गया है) –

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