目錄
之前網上有人建議增加磁貼(tile)、徽章(badge)功能。利用周末的時間,將這兩個功能添加上去了。如果將磁貼固定到開始屏幕,磁貼就會循環播放首頁5條“頭條文章”所包含的的圖片及標題,並且會顯示還未閱讀的條數(badge)。另外,當用戶點亮屏幕,后台任務自動執行刷新首頁數據,如果有新的“頭條文章”,便會向用戶發送Toast通知。下面是效果圖:
背景了解
【完全開源】知乎日報UWP(上篇):界面設計、官方API分析。
【完全開源】知乎日報UWP(下篇):商店APP、github源碼。Windows APP良心出品。
商店APP(寫這篇文章的時候,最新版還沒有審核完畢)
注:點擊通知,只能喚醒APP主界面,並不能跳轉到指定頁面(該功能后期完善)。
實現方法其實很簡單,主要用到了“后台任務”(后面會講到),當用戶點亮屏幕時,會觸發后台任務,后台任務刷新數據,更新磁貼、badge以及看情況是否發送通知:
- 點亮屏幕(可以設置成每隔30分鍾、1小時);
- 請求數據;
- 更新磁貼。將頭條文章的圖片、標題update到tile中(注意這里是指定tile更新計划:ScheduledTileNotification);
- 更新badge。如果頭條文章有未閱讀的,則將未閱讀條數更新到Badge;
- 顯示Toast通知。如果有未閱讀的文章並且還未曾向用戶提醒,那么發出Toast通知。
具體實現:
1.指定tile更新計划:
2.更新badge:
3.顯示toast通知:
用到的庫:
主要用來操作顯示tile、badge以及toast的xml,如果不用它的話,那么我們需要使用XmlDocument來手動構建xml(很麻煩),使用NotificationsExtensions的話,寫代碼時帶智能提示,比如提示你使用到的tile模板需要兩個text、一個image等等。
其實這塊本來想單獨寫一篇文章的,只是光前面的內容感覺湊不齊一篇文章。
移動設備有很多資源限制,比如內存、存儲、電量等,它不同於傳統PC等設備,可以24小時插上交流電源,日夜工作不關機、不關屏幕,移動設備顯然做不到這樣。既然它存在短板,那么設備中運行的軟件也必須做出讓步(妥協)。怎樣妥協呢?就是讓你的APP代碼大部分時間不運行。是的,沒錯,你手機APP的代碼運行時間只占一小部分。
傳統桌面軟件運行狀態:
APP運行狀態:
如上圖所示,APP的狀態有三個。只有當APP界面處於手機屏幕最前端時,它才處於Runing狀態,其余時間要么是Suspended(或即將進入Suspended)狀態、要么就是沒運行(Not Runing)。APP運行機制只有設置成這樣才會避免移動設備的短板,因為它只要不運行就能夠相對性地節約資源啊。
那么現在有一個問題,男刀系統中真的同一時間只能運行一個APP嗎?如果是這樣,那么大部分APP怎樣完成一些實時功能呢?比如怎樣接收短信、怎樣接收QQ消息?不可能讓QQ APP一直處於手機屏幕最前端吧?萬一屏幕關閉了呢?為了解決這個問題,Windows 10(Mobile)中引入了“后台任務”的概念,即使APP沒有運行(not running或者suspended),后台任務還是可以運行的,也就是說它的運行不受APP運行狀態的影響。
什么是后台任務?說白了,后台任務就是一個被系統回調的代碼塊,當系統滿足某個條件時自動調用,而這完全不受APP本身運行狀態的影響(哪怕APP都沒有啟動過)。
有了后台任務,我們就能開發出具備實時功能的APP了,首先向系統注冊一個后台任務,給定后台任務執行的條件,這樣就OK了。下次不管APP本身狀態如何,一旦條件滿足(比如收到QQ消息),后台任務立即執行。
(請忽略圖中手機)
使用后台任務步驟:
- 檢查系統中是否已存在該后台任務,若否;
- 創建后台任務;
- 指定后台任務入口;
- 指定后台任務觸發器(回調的條件);
- 向系統注冊。
之后就OK了。需要注意的是,注冊前必須檢查是否已經存在、后台任務的定義(入口)必須放在一個單獨的Windows Runtime Component項目中。
后台任務和APP本身可以被看做是兩個相互獨立的Process,所以他們之間的數據交互最好通過永久性存儲介質(比如文件)來傳遞,具體內容這篇文章不講了。關於后台任務的內容可以看MSDN。后面如果有計划再細說。
特殊提示:
在Windows 10開發中,我們要充分利用Tile(磁貼)、Badge(徽章)以及Toast 通知,這些東西是誘導用戶打開APP查看信息的主要方式。因為一個APP可能被用戶遺忘了從來不會處於手機屏幕的最前端,我們只能通過后台任務接收一些推送信息、實現一些實時功能,然后再通過tile、badge以及toast的方式誘導用戶打開app。
開源有益,多謝點贊!