Windows Phone 7(WP7)開發 Loaded VS OnNavigatedTo

來源:互聯網
上載者:User

本來想中午就更新一篇文章的,結果這都下午三點半多了,剛才一個小問題一直困擾了我很長時間,剛才經過努力終於是解決了(嗯,應該是解決了吧,還有待更多時間的測試)。

具體問題,我在我的應用程式的首頁面需要擷取手機的GPS位置資訊,並通過網路API轉換成地理位置,然後把這個值綁定到一個控制項上面顯示出來。 很簡單,不是麼,所以我就直接在首頁的Loaded裡面調用了這些需要的方法,其實寫這個功能用不了太多的代碼,但是當我寫完之後我發現,我的程式變得非常的不穩定,80%的情況下是好的,而有的時候介面就會卡住不動。具體表現為退出程式之後重新開啟,有的時候介面就處於卡死狀態,直到系統強行結束掉我的程式。甚至有的時候直接在VS裡面串連真機調試,就卡在首頁不動。

有的朋友該說了:你沒有用多線程吧?如果請求GPS和請求網路等等都在UI線程裡進行,那肯定是要卡死的啊。

我確定,我已經手工寫了新的進程了。我也試圖用斷點跟蹤調試到底是哪裡出現了問題, 但是終無所獲。

由於接近80%的情況下沒有異常反應,所以這個問題處理的優先順序並不高,但我知道有這麼一個BUG總感覺不爽,確實是很不爽啊。

直到一個小時之前,我突然想到瞭解決辦法:

我把上面在Loaded裡面做的事情,全部轉移到了OnNavigatedTo裡面來做,之後測試了數次,均表現正常(如果不出意外,相信我已經找到了正確的解決方案)。

 

上面羅嗦了一大堆,反思一下並引入正題:Loaded VS OnNavigatedTo

做WinForm或ASP.NET的朋友在處理頁面初始化的問題上一般都是習慣在Loaded裡面做事情,當然我也不例外。不過在WP7上,看來需要注意一下了。現在分析我剛才遇到的問題,我隱約覺得可能是Load裡寫的東西和載入介面的資料繫結產生了衝突,或者是資源死結,當然,這個具體原因我無法給出準確的判斷,這個只是感覺。

         XXX_Loaded和OnNavigatedTo都是在頁面“載入”時觸發的(我這裡說的載入是指對使用者來說,即他們看到介面展示在他們之前),這個可以稱為他們的共同點,他們共同使用本頁面的資源。至於不同點,XXX_Loaded方法並非每次頁面啟用而執行,這個估計由系統調度,而OnNavigatedTo方法則在每次頁面啟用的時候都會執行。還有就是它們的先後順序, 我個人認為(為了怕誤導大家先寫“個人認為”,等查到確切資料再改)應該是Loaded在前,OnNavigatedTo在後,Loaded執行之時就是頁面正在載入的時候,OnNavigatedTo執行的時候應該是頁面完全載入完畢了。 剛才還準備查查資料,結果就有朋友提出OnNavigatedTo比Loaded早(感謝“阿幹@NET”),馬上寫了兩行程式測試了一下,發現確實如此,寫程式不能靠感覺啊~那剛才我遇到的問題,估計就是線程衝突而導致資源死結(繼續標註“可能是”),而OnNavigatedTo在前,似乎就對這種情況進行了避免。剛才寫完文章之後也百度了一下,發現很多朋友多認為頁面裡還是用OnNavigatedTo比Loaded好一些。

所以,以後涉及到介面上繫結資料的變數的值的擷取,最好還是寫到OnNavigatedTo裡面吧。當然,如果你想只執行一次,比如我上面的GPS位置只需要擷取一次就夠了,那也容易:

 

 private bool _isFirst = true;

        protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
        {
            base.OnNavigatedTo(e);
            if (_isFirst)
            {
               //TODO:.......
                _isFirst = false;
            }
        }
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.