與眾不同windows phone (12)

來源:互聯網
上載者:User

Background Task(背景工作)之 PeriodicTask(周期任務)和 ResourceIntensiveTask(耗用大量資源的工作)

介紹

與眾不同 windows phone 7.5 (sdk 7.1) 之背景工作

PeriodicTask - 周期任務

ResourceIntensiveTask - 耗用大量資源的工作(通常用於手機與電腦同步資料)

樣本

示範如何註冊和運行 PeriodicTask 類型的任務和 ResourceIntensiveTask 類型的任務

1 、後台代理

MyScheduledTaskAgent/ScheduledAgent.cs

/*  * 本例示範如何由背景工作定時彈出 Toast,以及如何定時更新應用程式瓷磚的 Badge   * 建議使用 ScheduledTaskAgent 類型的模板建立此項目  *   * BackgroundAgent - 後台代理類,抽象類別,它是 ScheduledTaskAgent、AudioPlayerAgent 和 AudioStreamingAgent 的基類  *     NotifyComplete() - 用於通知系統,代理已經完成了當前的任務,調用此方法後,系統才會去準備執行下一次任務  *     Abort() - 用於通知系統,放棄此次和以後的任務,對應的 ScheduledAction 的 IsScheduled 將變為 false  *       * ScheduledTaskAgent - 後台計劃任務代理類,抽象類別  *     OnInvoke(ScheduledTask task) - 背景工作每次執行時都會調用此方法  *       * ScheduledAgent - 用於示範背景工作的類,繼承自 ScheduledTaskAgent,需要重寫 ScheduledTaskAgent 的 OnInvoke() 方法  *       * DeviceStatus.ApplicationMemoryUsageLimit - 程式在此時被分配到的記憶體數量(單位:位元組),每次擷取此值可能都不一樣,但是肯定不會超過 6MB  *   * ShellToast - 用於管理 Toast  *     Title - Toast 的標題  *     Content - Toast 的內容  *     NavigationUri - 單擊 Toast 之後連結到的目標地址(Uri 類型)  *     Show() - 顯示 Toast(註:如果 Show 方法的調用程式正在前台運行,則不會顯示 Toast)  *       * ScheduledActionService.LaunchForTest(string name, TimeSpan delay)  *     對於 ScheduledTask 類型的任務,在指定的時間後馬上執行任務。其用於開發目的,僅在開發工具部署的應用程式中有效  *     PeriodicTask 和 ResourceIntensiveTask 均繼承自 ScheduledTask  */   using System.Windows; using Microsoft.Phone.Scheduler;    using Microsoft.Phone.Shell; using Microsoft.Phone.Info; using System; using System.Linq;    namespace MyScheduledTaskAgent {     public class ScheduledAgent : ScheduledTaskAgent     {         /*          * _classInitialized - 用於標記 ScheduledAgent 是否已經被初始化          *     標記成 volatile 是為了避免編譯器認為此欄位無外部修改,而將其最佳化放入寄存器(標記成 volatile 的欄位只會放在記憶體中)          *     一般來說,多任務環境下各任務間共用的欄位應該被標記為 volatile          */        private static volatile bool _classInitialized;            public ScheduledAgent()         {             if (!_classInitialized)             {                 _classInitialized = true;                    Deployment.Current.Dispatcher.BeginInvoke(delegate                 {                     Application.Current.UnhandledException += ScheduledAgent_UnhandledException;                 });             }         }         private void ScheduledAgent_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e)         {             if (System.Diagnostics.Debugger.IsAttached)             {                 System.Diagnostics.Debugger.Break();             }         }            protected override void OnInvoke(ScheduledTask task)         {             string toastTitle = "";                if (task is PeriodicTask)                 toastTitle = "PeriodicTask";             else if (task is ResourceIntensiveTask)                 toastTitle = "ResourceIntensiveTask";                string toastContent = "MemoryUsageLimit: " + DeviceStatus.ApplicationMemoryUsageLimit;                // 彈出 Toast             ShellToast toast = new ShellToast();             toast.Title = toastTitle;             toast.Content = toastContent;             toast.NavigationUri = new Uri("/BackgroundTask/BackgroundAgentDemo.xaml?param=abc&param2=xyz", UriKind.Relative);             toast.Show();                // 更新應用程式磁貼的 Badge             ShellTile applicationTile = ShellTile.ActiveTiles.First();             StandardTileData newTile = new StandardTileData             {                 Count = new Random().Next(1, 99)             };             applicationTile.Update(newTile);    #if DEBUG             // 15 秒後執行“task.Name”任務             ScheduledActionService.LaunchForTest(task.Name, TimeSpan.FromSeconds(15)); #endif                NotifyComplete();         }     } }    /*  * 主程式引用此項目後,會在 manifest 中添加如下資訊:  * <ExtendedTask Name="BackgroundTask">  * <BackgroundServiceAgent Specifier="ScheduledTaskAgent" Name="MyScheduledTaskAgent" Source="MyScheduledTaskAgent" Type="MyScheduledTaskAgent.ScheduledAgent" />  * </ExtendedTask>  */

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/extra/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.