【完全開源】知乎日報UWP版:增加Live磁貼、Badge、以及Toast通知

jopen 8年前發布 | 19K 次閱讀 開源 Android開發 移動開發

目錄

  • 說明
  • 實現方法
  • APP生命期
  • 后臺任務
  • </ul>

    之前網上有人建議增加磁貼(tile)、徽章(badge)功能。利用周末的時間,將這兩個功能添加上去了。如果將磁貼固定到開始屏幕,磁貼就會循環播放首頁5條“頭條文章”所包含的的圖片及標題,并且會顯示還未閱讀的條數(badge)。另外,當用戶點亮屏幕,后臺任務自動執行刷新首頁數據,如果有新的“頭條文章”,便會向用戶發送Toast通知。下面是效果圖:

    背景了解

    【完全開源】知乎日報UWP(上篇):界面設計、官方API分析。

    【完全開源】知乎日報UWP(下篇):商店APP、github源碼。Windows APP良心出品。

    github源碼

    商店APP (寫這篇文章的時候,最新版還沒有審核完畢)

    注:點擊通知,只能喚醒APP主界面,并不能跳轉到指定頁面(該功能后期完善)。

    實現方法

    實現方法其實很簡單,主要用到了“ 后臺任務 ”(后面會講到),當用戶點亮屏幕時,會觸發后臺任務,后臺任務刷新數據,更新磁貼、badge以及看情況是否發送通知:

    • 點亮屏幕(可以設置成每隔30分鐘、1小時);
    • 請求數據;
    • 更新磁貼。將頭條文章的圖片、標題update到tile中(注意這里是指定tile更新計劃:ScheduledTileNotification);
    • 更新badge。如果頭條文章有未閱讀的,則將未閱讀條數更新到Badge;
    • 顯示Toast通知。如果有未閱讀的文章并且還未曾向用戶提醒,那么發出Toast通知。

    具體實現:

    1.指定tile更新計劃:

    2.更新badge:

    3.顯示toast通知:

    用到的庫:

    NotificationsExtensions

    主要用來操作顯示tile、badge以及toast的xml,如果不用它的話,那么我們需要使用XmlDocument來手動構建xml(很麻煩),使用NotificationsExtensions的話,寫代碼時帶智能提示,比如提示你使用到的tile模板需要兩個text、一個image等等。

    APP生命期

    其實這塊本來想單獨寫一篇文章的,只是光前面的內容感覺湊不齊一篇文章。

    移動設備有很多資源限制,比如內存、存儲、電量等,它不同于傳統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。

    開源有益,多謝點贊!

來自: http://www.cnblogs.com/xiaozhi_5638/p/5120575.html

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!