<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-348  評論-598  文章-0  trackbacks-0

    在WP7.1中針對Background Agent的新API增加了蠻多非常強大的部分,以下將介紹Scheduled Multi Tasking的部分。

      Scheduled Multi Tasking主要是讓Application支援多工模式來執行任務,讓Application不在前景模式下也可以繼續在背景執行某些特定的任務,例如:背景下載、背景更新資料、背景唿叫服務…等。

      然而,WP7.1提供Agent的模式,讓開發Application時將要背景執行的邏輯,獨立放置于Agent之中透過排程來完成任務。

      但要注意的是,Agent與Application必竟還是屬于不同的專案,因為IsolatedStorage中的IsolatedStorageSettings無法共用,要交換資料需透過IsolatedStorage檔案或其他方式來交換。

      因此,在設計一個支援Background Agent(ScheduledTaskAgent)的Application時,我個人會有幾個考量:

      1. 將背景執行的邏輯獨立成一個類別或模組,由該模組完成所有背景的任務;

      2. 使用設定檔(config)的方式,將參數或執行結果獨立于檔案,提供Application與Agent均可以取得;

      3. Agent是背景的任務,在背景發生Exception的容錯機制需要特別設計,盡量透過通知告知用戶;

      接下來,將細部去討論Scueduled Tasking由那些重要的元素組成:

      〉Microsoft.Phone.Scheduler - Scheduled Multi Tasking:

      WP7.1允許Schedule Task與Background Agent在背景執行它們的任務,然而Schedule Task與Background Agent使用上卻有所不同:

      ‧Schedule Task:重點在于指定「週期性/延遲性」執行任務,透過設定Schedule的時間頻率重覆地去執行任務;

      ‧Background Agent:根據不同的Agent可在細分使用重點,但較屬性一次性任務或接收外部事件所觸發的任務;

      在Microsoft.Phone.Scheculer針對Scheulde提供了Task與Notification的使用,其用法上Schedule Task又是另一種用途,針對Schedule Notification會在另一篇<>進行說明。

      然而,在Scheulde Task的使用上有幾個重要元系一定要去了解的,以下將詳細說明:

      A. ScheduledActionService:

      專用于管理該設備所有的Scheduled Actions。Scheduled Actions包括了可用于通知的Alarm、Reminder,更包括下方介紹的二個運行于Background Agent的Periodic Task與Resource-Intensive Task。其重要的方法如下:

    名稱說明
    Add向作業系統註冊一個Scheduled Action。主要透過Scheduled Action的Name做為識別值。
    Find透過特定的Name找出Scheduled Action。
    GetActions(Of T)回傳系統中所有特定類型的Scheduled Actions。
    LaunchForTest指定特定的延遲時間與ScheduledTask后,要求Background Agent執行該ScheduledTask。
    Remove從Scheduled Action Service將指定的名稱的Scheduled Action移除。
    Replace通常會配合Find找出指定Name的Scheduled Action,并加以取代它。

      B. PeriodicTask:

      Periodic(定期) Task是一種定期代理運作的觀念,專門針對運作背景任務所需時間較少,而且是執行隔間具有規律週期性的情境。

      常見的使用情境,例如:定期上傳手機的Location資訊、完成少量資料的同步、更新Tile狀態…等。

      B-1. 使用Periodic Task的約束與時間週期建議

    約束/建議說明
    排程時間間隔:30分通常每30分執行一次,在電力狀況不錯的情形下可以配合其他background process使用時,也可以設定接近上下差距10秒的使用。
    排程持續時間通常支援持續執行25秒,但也可能因為其他塬因造成該agent被提早結束。
    電池為節約模式時,能防止Exception由于電池是否要使用節約模式是由用戶自行選擇。如果該模式被選擇時,當電池進入節約模式時,periodic task將有可能無法使用。
    每一個設備在Periodic Task的限制為了讓電池最大化使用,不同的設備對電池的使用有一定的控制範圍,因此,可能限制一個設備最多有幾個Agent可以被執行,如果超過,它會自動被turn off。

      C. ResourceIntensiveTask:

      Resource-Intensive(資源密集) Task是針對需要相對較長的處理時間,或是遇到需使用大量手機電源、網路等資源時較為適用的類型。

      常見的使用情境,例如:同步大量的資料(如App需要下載大量的資料至手機端才能讓App運行)…等。

      C-1. 使用ResourceIntensiveTask的約束與時間週期建議

    約束/建議說明
    持續時間:10分鐘通常resource-intensive agent一般執行持續約10分鐘,如果有其他如下方的限制,將會提早停止agent的執行。
    外部電力需求除非設備已連接外部的電力來源,否則無法執行。
    無行動網路能線能力除非設備已通過Wi-Fi、行動網路或連接到PC,否則無法執行。
    最小電力需求除非電力超過90%的情形,否則無法執行resource-intensive agent
    設備螢幕被鎖定狀態除非電話處于鎖定的狀態,否則無法執行resource-intensive agent
    通話中無法使用當手機處于通中狀態時,resource-intensive agent無法使用。
    不能改變網路狀態為行動網路如果resource-intensive agent企圖去唿叫AssociateToNetworkInterface(Socket, NetworkInterfaceInfo)來指定任何一種行動網路(GSM或CDMA),則會失敗。

      這二個元素其實都是由ScheduleAction與ScheduledTask抽象類別實作出來的,它們分別有自身使用的情境與適用性,

      二者最大的差別即在于使用情境與需要耗用手機資源的多少,以及resource-intensive task要在螢幕鎖定與電力90%以上才能執行。

      由于使用resource-intensive task要求的限制實在很多,因此,在設計Scheduled Task時需要特別考慮這個部分,至于其他相關的

      屬性就大同小異了,以下簡介其較長使用到的屬性:

    名稱說明
    Description設定/取得有關該Scheduled Task的描述。該描述的內容將會出現于手機「Settings/Applications/Background Tasks Settings」的畫面中。 
    如下圖:以Background Scheulde為程式名稱: 
    0000 0001
    ExpirationTime設定/取得Scheduled Task到期的時間。
    IsScheduled取得Scheduled Task狀態是否為啟動。
    LastExitReason取得Agent執行最近一次Task被結束的理由。
    LastScheduledTime取得Agent執行最近一次Task的時間,以手機時間為主。
    Name取得Scheduled Action的名稱。

      了解了二個元素的基本屬性與使用情境后,有幾個使用Background Agent要特別注意的:

      1. 一個Application只能有一個Background agent(ScheduledTaskAgent),但Agent可以單獨使用PeriodicTask、ResourceIntensiveTask

      或者二個同時使用。要注意的是一個Agent只能有一個PeriodicTask與一個ResourceIntensiveTask。

      2. Background Agent(ScheduledTaskAgent):

      2-1. 透過OnInvoke(ScheduleTask)觸發Agent邏輯的部分;

      2-2. 已成功執行完所有任務時,記得唿叫NotifyComplete()告知Agent已完成任務;

      2-3. 如果在執行過程發生錯誤或是無法執行Task時,要記得唿叫Abort()告知Agent接下來取消運作,然而即可以在Application端取得

      ScheduledTask中的IsScheduled屬性為false。但要注意的是如何Abort()之后,要記得使用ShellToast告知用戶,以免用戶不知道。

      3. Background Agent在記憶體使用量的控制:

      3-1. Periodic agents與resource-intensive agents允許在每次執行Task時,不超過6MB記憶體用量。

      3-2. Audio agents則限制不能超過15MB記憶體用量。

      3-3. 在Debug模式下則不限制,但可以透過API去查詢在每一個部分使用記體憶的狀況。

      4. 預設Agent為二個星期后需要重新安排Scheduled:

      雖然可以透過ScheduledTask中的LastScheduledTime去確認究竟最近一次執行的Datetime為何,并且使用ExpirationTime去指定Task

      可運行的時間長度。但是使用ScheduledTask可能因為條件限制(例如遇到執行Task時沒網路能力,自動要求Agent延后執行),造成Task

      長時間沒有被執行,為了確保Task不會一直占住不使用,透過設定2個星期可存活時間,可以自動解決這個問題。設定ExpirationTime可

      在每一次執行Application于前景狀況時,進行判斷與設定。

      5. Scheduled Agent在連續二個Crash后自動取消:

      由于使用Periodic agents與resource-intensive agetns是交由Agent去控制,因此,當Agent連續出現二次以上的Crash或無法預期的錯誤,

      該Agent將會被停止,需透過Application回到前景模式再重新啟動它。



    ---------------------------------------------------------
    專注移動開發

    Android, Windows Mobile, iPhone, J2ME, BlackBerry, Symbian
    posted on 2012-02-05 19:43 TiGERTiAN 閱讀(1228) 評論(0)  編輯  收藏 所屬分類: WindowsPhone

    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 一个人看的免费高清视频日本 | 麻豆国产VA免费精品高清在线 | 国产精品亚洲精品青青青| 亚洲日韩乱码中文无码蜜桃臀| 亚洲videosbestsex日本| 亚洲av无码日韩av无码网站冲 | 国产亚洲Av综合人人澡精品| 一级女性全黄生活片免费看| 国产真人无码作爱视频免费 | 久久午夜伦鲁片免费无码| 在线观看免费高清视频| 免费jjzz在线播放国产| 久久精品国产亚洲香蕉| 亚洲av无码国产综合专区| 日本黄页网址在线看免费不卡 | 51精品视频免费国产专区| 欧洲美熟女乱又伦免费视频| 精品国产亚洲男女在线线电影| 久久亚洲中文字幕精品有坂深雪 | 丰满少妇作爱视频免费观看| 久久99精品国产免费观看| 久久不见久久见中文字幕免费 | 中文字幕亚洲男人的天堂网络| 暖暖免费中文在线日本| 95免费观看体验区视频| 国产午夜免费福利红片| 亚洲精品高清久久| 国产偷国产偷亚洲高清在线| 久草免费福利资源站| 国产精品美女自在线观看免费| 久久精品亚洲中文字幕无码网站| 亚洲中文精品久久久久久不卡| 中文字幕无线码中文字幕免费| 无码国产精品一区二区免费式影视| 亚洲区日韩区无码区| 亚洲制服丝袜一区二区三区| 国产vA免费精品高清在线观看| 久久不见久久见中文字幕免费 | a在线免费观看视频| 成年女人免费视频播放77777| 亚洲国产成人片在线观看|