Windows Phone 8.1的預(yù)覽版將在近期推送,WP 8.1的SDK也已經(jīng)進(jìn)入到RC階段,可以從這里安裝。本次更新的SDK被直接集成到了VS2013Update2里面,不再是單獨(dú)的安裝包。這就意味著我們要先把Windows從8升級到8.1,再把VS從2012升級到2013。又是折騰了一個(gè)夠。可能有人說這個(gè)Update2還是RC版,要等到Release放出。我覺得這個(gè)安裝包就是Release了,要等WP8.1出來后再改名兒,要不WP8.1還沒出,SDK的Release先放出來了容易讓人詬病。這篇文章就來討論一下那些在WP8.1SDK中的新特性們。
1、創(chuàng)建應(yīng)用界面
Universal Apps是一個(gè)統(tǒng)一的項(xiàng)目,可以將Windows Store和Windows Phone 8.1創(chuàng)建在一個(gè)項(xiàng)目中,直接用一套Core,兩個(gè)UI。這絕對是一個(gè)非常有用的功能。上面的項(xiàng)目模板中你感覺到陌生的可能是Hub App,其實(shí)就是之前的Panorama項(xiàng)目,名字被改成了Hub。這次我們就來創(chuàng)建一個(gè)Windows Phone8.1的項(xiàng)目。而且只能創(chuàng)建WP8.1的項(xiàng)目,不像VS2012一樣可以選擇創(chuàng)建7.1還是8.0的項(xiàng)目。我想微軟可能是出于目前所有8.0的手機(jī)都可以免費(fèi)升級到8.1的考慮,不過我想今后的一段時(shí)間8.0的項(xiàng)目還將是主流。
上面這張圖就是創(chuàng)建好的項(xiàng)目了。首先你感覺到的也是最大的變化就是所有的命名空間怎么都是Windows Store里的,這就是前面提到的存在Universal App的原因。在WP8.1的SDK中所有的命名空間簡直大換血,完全和Windows Store統(tǒng)一,不再是單獨(dú)的一套API命名。不光是命名空間,這次變更做的非常之徹底,徹底到連Windows Store中的控件都直接可以再WP中使用,比如,F(xiàn)lipView, GridView, ListView, RichEditBox, PasswordBox, SemanticZoom。
2、應(yīng)用生命周期
為了盡可能的重用WP中的代碼,應(yīng)用可以在多任務(wù)列表里關(guān)閉。所以WP的生命周期有了非常大的變化,總共有三種狀態(tài)Running、Suspended、NotRunning。
你的應(yīng)用可能從多種途徑啟動(dòng),可能是用戶直接啟動(dòng)或者是從tile啟動(dòng)。在進(jìn)入到Running狀態(tài)之前應(yīng)用會進(jìn)入Activated狀態(tài),在這個(gè)狀態(tài)我們可以判斷應(yīng)用的上一個(gè)狀態(tài),從而判斷是否有上次退出之前保存的數(shù)據(jù)。重寫OnLaunched事件,這個(gè)事件在每次啟動(dòng)應(yīng)用的時(shí)候被執(zhí)行。
async protected override void OnLaunched(LaunchActivatedEventArgs args)
{ if (args.PreviousExecutionState == ApplicationExecutionState.Terminated || args.PreviousExecutionState == ApplicationExecutionState.ClosedByUser)
{ // TODO: Populate the UI with the previously saved application data
}
else
{ // TODO: Populate the UI with defaults }
if (Window.Current.Content == null)
{
Window.Current.Content = new MainPage();
}
Window.Current.Activate();
}
PreviousExcutionState代表應(yīng)用打開之前的狀態(tài),ApplicationExcutionState有三種狀態(tài),如果是Terminated,代表程序是被系統(tǒng)后臺關(guān)閉的,那么可能有我們之前保存的數(shù)據(jù)。ClosedByUser和NotRunning代表應(yīng)用是被用戶關(guān)閉或者為啟動(dòng)的狀態(tài),要進(jìn)行一次完整的啟動(dòng)應(yīng)用。如果用戶讓應(yīng)用進(jìn)入到后臺,那么操作系統(tǒng)會給一點(diǎn)時(shí)間來相應(yīng)用戶的重新開啟應(yīng)用,如果用戶沒有立即啟動(dòng)后臺的應(yīng)用那么系統(tǒng)會將應(yīng)用置成Suspend掛起狀態(tài)。大部分應(yīng)用進(jìn)入后臺狀態(tài)時(shí)都會停止運(yùn)行。
系統(tǒng)會保持盡量多的后臺應(yīng)用掛起,用戶一旦啟動(dòng)后臺應(yīng)用,可以得到一個(gè)更快的啟動(dòng)速度。然而如果后臺掛起的應(yīng)用過多,那么系統(tǒng)會自動(dòng)關(guān)閉一些應(yīng)用,而且應(yīng)用不會收到任何的通知,所以如果后臺應(yīng)用有需要保存的數(shù)據(jù),就需要在Suspended狀態(tài)的時(shí)候保存。通過訂閱Application.Current.Suspending事件來保存重要數(shù)據(jù)。在應(yīng)用進(jìn)入Suspending狀態(tài)后的1到10秒鐘沒有在重新打開應(yīng)用,系統(tǒng)會認(rèn)為應(yīng)用已經(jīng)停止響應(yīng)并將其掛起進(jìn)入Suspened狀態(tài)。
如果你在在應(yīng)用掛起時(shí)使用異步的方法來保存數(shù)據(jù),那么你可以通過GetDeferral方法來推遲掛起事件,直到你的任務(wù)完成后再調(diào)用SuspendingDeferral的Complete方法來告知系統(tǒng)你的異步任務(wù)已經(jīng)完成,可以進(jìn)入Suspended狀態(tài)了。如果一個(gè)被掛起的應(yīng)用被重新喚起,將先觸發(fā)Resuming事件再觸發(fā)Activated事件。
3、程序內(nèi)導(dǎo)航
在WP8.1中用戶可以通過back鍵來進(jìn)入Suspended狀態(tài)而不是直接退出應(yīng)用。這個(gè)功能和以往的WP應(yīng)用不同,通過注冊BackPressed事件。當(dāng)用戶點(diǎn)擊back鍵的時(shí)候?qū)⒂|發(fā),通過設(shè)置BackPressedEventArgs.Handled為true告知系統(tǒng)將應(yīng)用放到后臺設(shè)為Suspended狀態(tài)。如果你的應(yīng)用在第一頁并不能再向后導(dǎo)航,那么你不應(yīng)該處理這個(gè)事件,系統(tǒng)將直接掛起你的應(yīng)用。在默認(rèn)的項(xiàng)目模板中默認(rèn)處理了這個(gè)邏輯。
private void HardwareButtons_BackPressed(object sender, BackPressedEventArgs e)
{
Frame frame = Window.Current.Content as Frame;
if (frame == null)
{ return;
}
if (frame.CanGoBack)
{
frame.GoBack();
e.Handled = true;
}
}
4、SD卡讀寫的支持
在WP8中開發(fā)者只能讀SD卡上的內(nèi)容,在WP8.1中如果應(yīng)用注冊了文件類型處理那么就可以對SD卡進(jìn)行寫的操作。具體可以點(diǎn)擊這里查看。
5、數(shù)據(jù)漫游
在WP8.1中提供數(shù)據(jù)漫游的功能,漫游的數(shù)據(jù)大小限制在100KB。只有在設(shè)備處于鎖屏狀態(tài)和系統(tǒng)不繁忙的情況下才會漫游數(shù)據(jù)。漫游的數(shù)據(jù)可以在不同版本的應(yīng)用之間使用,適合在Windows Store和Windows Phone Store之間分享數(shù)據(jù)。具體的如何實(shí)現(xiàn)可以點(diǎn)擊這里。
6、后臺傳輸
在WP8.1中你可以通過Windows.Networking.BackgroundTransfer實(shí)現(xiàn)后臺上傳或者下載傳輸,這個(gè)過程完全是由系統(tǒng)完成的,即使你的應(yīng)用在沒有打開的情況下。
7、在通知中心管理toast
在WP8.1中引入了新版的通知中心,開發(fā)者可以管理通知中心中的toast。通過Windows.UI.NotificationsAPI開發(fā)者可以對通知中心中的通知進(jìn)行添加、刪除、替換和過期等設(shè)置。詳細(xì)的設(shè)置可以點(diǎn)擊這里查看。
總結(jié)
隨著昨晚WP8.1開發(fā)者預(yù)覽版的推送,正式版估計(jì)也不遠(yuǎn)了。看了What's new in WP8.1 SDK我倒是覺得對用戶來講新的功能其實(shí)不多,但對開發(fā)者來說更新的內(nèi)容很多。將升級到8.1確實(shí)要費(fèi)一番功夫,不過也方便了以后的Windows8的開發(fā)。上面只列出了我覺得有意思的一些features,上面也給出了鏈接可以看全部的更新。