【W(wǎng)P開(kāi)發(fā)】正確理解頁(yè)面緩存
系統(tǒng)
1998 0
注:本文內(nèi)容面向Runtime App。
在新建項(xiàng)目后,細(xì)心觀察,你會(huì)發(fā)現(xiàn)在App類(lèi)中有以下代碼:
? ?? ?? ?? ?? ? // TODO: 將此值更改為適合您的應(yīng)用程序的緩存大小? ?? ?? ?? ?? ? rootFrame.CacheSize = 1;
這行代碼放在了OnLaunched方法中,CacheSize是Frame類(lèi)的一個(gè)公共屬性。
我們知道,F(xiàn)rame類(lèi)負(fù)責(zé)完成頁(yè)面之間的導(dǎo)航,它本身就是一個(gè)容器控件。CacheSize屬性用于告訴Frame對(duì)象,要緩存的頁(yè)面數(shù)量。近日,有人提問(wèn)說(shuō),這個(gè)緩存頁(yè)面數(shù)是不是導(dǎo)航記錄的數(shù)量?
明確地告訴你:非也。
Frame的導(dǎo)航記錄在BackStack屬性中,這個(gè)Cache并不是用來(lái)緩存頁(yè)面的導(dǎo)航記錄的,一定要注意啊,不要搞混了。
CacheSize屬性是用于設(shè)置要保留頁(yè)面實(shí)例的個(gè)數(shù)。當(dāng)Frame導(dǎo)航到某個(gè)頁(yè)面時(shí),通常情況下,是要調(diào)用頁(yè)面的構(gòu)造函數(shù)來(lái)創(chuàng)建某頁(yè)的新實(shí)例的。即,不論你是向前導(dǎo)航還是向后導(dǎo)航,只要導(dǎo)航到某頁(yè),某頁(yè)都會(huì)重新實(shí)例化。因此,就可以理解為什么Frame類(lèi)用于導(dǎo)航的Navigate方法要這樣定義了:
public bool Navigate(System.Type sourcePageType)
這與Silverlight中的導(dǎo)航不同,SL中是傳遞URI的,而這里是傳遞頁(yè)面類(lèi)的Type,就因?yàn)榈玫侥硞€(gè)頁(yè)面類(lèi)的Type,才會(huì)在導(dǎo)航是new一個(gè)實(shí)例出來(lái)。
感覺(jué)很抽象嗎?沒(méi)事,示例是無(wú)敵學(xué)習(xí)利器,還猶豫什么,動(dòng)手。
1、啟動(dòng)VS,新建一個(gè)”空白應(yīng)用程序(Windows Phone)“項(xiàng)目。據(jù)說(shuō)MS會(huì)統(tǒng)一所有平臺(tái)的命名,當(dāng)然這是需要的,也是蓋茨的夢(mèng)想。不管叫什么,系統(tǒng)還是一樣的,只是叫法不同罷了。
2、在App類(lèi)中,找到OnLaunch方法,把CaheSize改為0。
rootFrame.CacheSize = 0;
3、把項(xiàng)目默認(rèn)生成的MainPage.xaml刪掉,因?yàn)樗拇嬖冢瑖?yán)重影響示例的演示,為什么? 待會(huì)兒再告訴你。
4、向項(xiàng)目中添加三個(gè)空白頁(yè),這個(gè)會(huì)了吧? 不會(huì)的話,就按Ctrl + Shift + A,試試。
5、三個(gè)頁(yè)面的結(jié)構(gòu)差不多,所以這里我只說(shuō)第一個(gè)頁(yè)面。XAML代碼如下:
?
【W(wǎng)P開(kāi)發(fā)】正確理解頁(yè)面緩存
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061
微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元