2011-04-05 9 views
5

क्या टॉम्बस्टनिंग और बैक कुंजी को सही तरीके से संभालने के लिए सबसे अच्छा अभ्यास है?निष्पादन कारणों से टॉम्बस्टनिंग और बैक कुंजी को सही तरीके से संभालना?

जैसा कि यह एमएसडीएन डॉक्यू में बताया गया है, आपको OnNavigatedFrom विधि में क्षणिक डेटा को सहेजना चाहिए। ठीक है, तो जब राज्यों को तोड़ने के लिए राज्यों को बचाने के लिए कोड स्पष्ट है।

लेकिन अब यदि आप पिछली कुंजी दबाते हैं तो OnNavigatedFrom विधि भी कॉल की जाती है और यदि आप अतिरिक्त चेक नहीं जोड़ते हैं, तो आप पहले राज्यों को शब्दकोश में सहेज लेंगे और इसके तुरंत बाद पृष्ठ नष्ट हो जाएगा। और फोन ऐप्लिकेशंस पेज। स्टेट डिक्शनरी भी होगी। तो बचत कोड पूरी तरह से सीपीयू, डिस्क और बैटरी समय बर्बाद है। जब कहीं और जाएंगे/वापस पेज से नहीं बल्कि जब एप्लिकेशन tombstoned हो जाता है OnNavigatingFrom केवल बुलाया जाएगा:

यह वही है मैं इसे रोकने के लिए किया गया है:

protected override void OnNavigatingFrom(System.Windows.Navigation.NavigatingCancelEventArgs e) 
    { 
     // when navigating back 
     if (e.NavigationMode == System.Windows.Navigation.NavigationMode.Back) 
     { 
      backKeyPressed = true; 
     } 
    } 

    protected override void OnNavigatedFrom(System.Windows.Navigation.NavigationEventArgs e) 
    { 
     if (backKeyPressed) 
     { 
      // Don't save states on back key! 
      backKeyPressed = false;  // set it anyway 
      return; 
     } 

     // Tombstoning 
     // save objects 
     this.SaveState("text", someText); 
     ... 
    } 

आपको बता दें कि।

साइड नोट: दिखाया गया कोड केवल उन पृष्ठों को कवर करता है जो केवल वापस नेविगेट कर सकते हैं। Thats क्यों मैंने वापस जोड़ा OnNavigatingFrom पर दबाया गया। यदि पृष्ठ किसी अन्य पृष्ठ पर नेविगेट कर सकता है तो आपको अतिरिक्त चेक की आवश्यकता है।

  1. क्या आपके द्वारा बनाए गए प्रत्येक पृष्ठ के लिए ऐसा करने का कोई बेहतर तरीका है?
  2. अब मुझे वास्तव में backKeyPressed चर जोड़ने और मेरे द्वारा बनाए गए प्रत्येक पृष्ठ पर जांचना है?
  3. क्या ढांचा हमारे लिए डेवलपर के लिए कुछ प्रदान नहीं करना चाहिए, इसलिए हमें इसके बारे में ज्यादा चिंता करने की ज़रूरत नहीं है?

इस बारे में आपके विचार क्या हैं?

संपादित करें:

अद्यतन प्रश्न यह स्पष्ट बनाता है।

उत्तर

2

ऑननविगेटिंग में नेविगेशन की निडरता की जांच करने का आपका दृष्टिकोण वास्तव में पृष्ठ को बैकस्टैक से हटाए जाने से ठीक पहले सहेजने वाले राज्य की असफल प्रदर्शन हिट से बचने के लिए अनुशंसित अभ्यास है।

एक स्पष्टीकरण है जिसे मैं अपने नमूना कोड में जोड़ना चाहता हूं: आपको 'नेविगेशन कैनसेलइवेंट आर्ट्स' में 'नेविगेशन मोड' संपत्ति की जांच करनी चाहिए ताकि यह निर्धारित किया जा सके कि यह आगे या पिछड़ा नेविगेशन है या नहीं।

तब केवल राज्य को ऑनवाविगेटेड से बचाएं यदि यह एक आगे नेविगेशन था, जैसा कि आपका नमूना दिखाता है। जब उपयोगकर्ता पीछे की ओर जाता है तो यह आपके प्रदर्शन को बेहतर बनाने में मदद करेगा।

+0

नेविगेशन मोड के साथ संकेत के लिए धन्यवाद। यह अच्छा होगा अगर भविष्य में यह व्यवहार सरल हो जाएगा। कुछ ऐसा है: NavigationMode को OnNavigatedFrom या टॉम्बस्टनिंग या उसके जैसा कुछ नया तरीका जोड़ें। तो हमें एक अलग backKeyPressed चर का उपयोग करने की आवश्यकता नहीं होगी। – Buju

+0

हाँ, यह टू-डू सूची पर है :-) –

+0

अच्छा धन्यवाद! :) – Buju

1

जेब प्रोरिज के 4-भाग Real-World Tombstoning in Silverlight for Windows Phone 7 ब्लॉग पोस्ट श्रृंखला में आपको कभी भी टॉम्बस्टनिंग के बारे में जानने की आवश्यकता है। आप भाग 2 पर विशेष ध्यान देना चाहेंगे जहां जेफ आवेदन छोड़ने पर राज्य को साफ़ करने के बारे में बात करता है।

+0

टॉम्बस्टनिंग के लिए IsolatedStorage का उपयोग करने के लिए टिप के लिए धन्यवाद। फिर भी आपने आपके द्वारा बनाए गए प्रत्येक पृष्ठ पर टॉम्बस्टनिंग + बैक कुंजी को संभालने के मामले को सही ढंग से जवाब नहीं दिया। यदि आप OnNavigatedFrom में हैं, तो आपको 3 मामलों का समर्थन करना होगा: वापस नेविगेट करना, टॉम्बस्टन करना और दूसरे पृष्ठ पर नेविगेट करना। – Buju

+0

ठीक है, आप केवल मूल्यों का एक ही सेट संग्रहीत कर रहे हैं, इसलिए आप राज्य सेवा को भरने वाले नहीं हैं, साथ ही आपको केवल कुछ भी करने की आवश्यकता है OnNavigatedFrom में, इसलिए आपके स्टोर को स्टोर करने में कोई समस्या नहीं होगी उस बिंदु पर क्षणिक स्थिति परवाह किए बिना।यदि परफ एक मुद्दा बन जाता है तो आप गलत समय पर गलत जगह पर और गलत जगह पर संग्रहीत कर रहे हैं :) –

+1

+1: जिस तरह से मैं इसे देखता हूं, 'PhoneApplicationPage.State' शब्दकोश का उपयोग केवल चीजों को सहेजने के लिए किया जाना चाहिए उपयोगकर्ता द्वारा स्क्रॉल किए गए लिस्टबॉक्स को कितना दूर किया गया था, या कौन सा पिवोटइटम सक्रिय था। निरंतर दृश्य मॉडल डेटा की बचत जैसे गहन सामान की गणना 'आवेदन। निष्क्रिय' घटना में की जानी चाहिए। – Praetorian

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