2012-02-12 67 views
1

我正在研究如何頻繁更新活動磁貼 - 例如每5分鐘一次。使用後臺代理更新活動磁貼

我以前使用過推送notifcations,但這次我想避免它們。

ShellTileShedule每小時只更新一次。

我在考慮使用每五分鐘運行一次的後臺代理,並使用從服務器獲取的信息更新磁貼。

除了14天到期,你能看到這個有什麼陷阱嗎?

人們通常會在14天到期時如何?

查詢服務和每隔5分鐘下載幾行文本真的會殺死電池嗎?

編輯:它似乎是一個任務的背景代理,如這隻更新每30分鐘,是否有辦法繞過這個,或更好的解決方案?

謝謝。

回答

1

你的背景任務在手機上運行的時間有點受到限制。如果OS可以同時執行多個任務,操作系統也會移動任務的預定時間 - 以避免必須兩次喚醒手機。如果你想每5分鐘更新一次瓦片,那麼推送通知是你唯一的選擇。但是你應該考慮用戶是否真的會定期查看信息。

我走中途路線 - 我使用PeriodicTask更新我的外殼瓷磚,因爲操作系統允許,但是當應用程序啓動時,我手動刷新具有最新信息的瓷磚。這允許用戶「強制」瓦片數據並且在用戶退出應用程序之後額外提供更真實的數據。

爲了避免14天到期,請在每次啓動應用程序時重新註冊後臺任務。這將繼續推進14天。它旨在防止未使用的應用程序使用寶貴的資源 - 如果您的用戶啓動您的應用程序,他們可能仍然希望後臺代理運行。如果沒有,他們可以通過設置>應用程序>後臺任務(或通過卸載,顯然)禁用它。註冊你的任務在初始化代碼中執行如下內容:

PeriodicTask task = ScheduledActionService.Find("MyTaskName") as PeriodicTask; 
    if ((task != null) && (task.IsEnabled == true)) { 
    ScheduledActionService.Remove("MyTaskName"); 
    } 

    task = new PeriodicTask("MyTaskName") { 
    Description = "My Periodic Task", 
    }; 
    ScheduledActionService.Add(task); 

#if DEBUG 
    if (System.Diagnostics.Debugger.IsAttached == true) { 
    ScheduledActionService.LaunchForTest("MyTaskName", TimeSpan.FromSeconds(10)); 
    } 
#endif 

#if DEBUG允許您在測試場景執行後立即安排任務。

0

我知道這是一個非常古老的問題,但它仍然可以節省一些人的時間。根據this文章,每次調用Update(shellTileData)時,您的貼圖的到期時間會延長2周以上。所以據我所知,這意味着你的應用程序可以永久更新它的磁貼而不必重新註冊任務。

相關問題