iOS 背景工作之 Long-running background task

來源:互聯網
上載者:User

標籤:

項目裡遇到需求需要App進入後台還能執行一些任務,於是便Google了一下,整理一篇小記錄。

大家都知道iOS系統裡,所有App進入背景時候預設都是會暫停所有線程,等到再雙擊Home鍵回到前台才會繼續執行。那有的情境需要在後台進行upload、download,或者進行一些計算等等怎麼辦呢?

iOS7推出了一些新的API,讓,那就是 NSURLSession ,就是為了取代前 NSURLConnection而生,在我們常用的 AFNetworking 2.0 中也新增了對其的支援 (AFURLSessionManager/AFHTTPSessionManager) ,用 NSURLSession 可以很方便快速地進行一些背景網路任務,很強大,網上資料也很多了,本文就不多提它了,後面也許會單獨對 NSURLSession 背景工作專門寫篇文章。

今天要介紹的是 long-running background task,"長時間運行背景工作",中文應該是這個名字,當我們需要進入後台不暫停程式,就可以給系統說一聲 "我需要在後台執行任務了哦~",然後你的 App 就不會被系統掛起,準確來說是延遲暫停,注意這是全域的,意思就是 App 裡所有東西都將正常執行,就跟在前台一樣。不過系統給你這個許可權的時間是有限的。

Begin

首先我們需要定義一個 UIBackgroundTaskIdentifier 對象,噢,Command 點進去居然是個NSUInteger

    UIBackgroundTaskIdentifier myTask;

然後有兩個方法來開始背景工作,都是在 UIApplication 裡,可以看到第二個方法可以傳一個taskName參數,而且是iOS7新增的。(原來 iOS4.0 就支援了~)
在 Apple 的文檔裡是這麼介紹的:

Marks the beginning of a new long-running background task.

- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithExpirationHandler:(void(^)(void))handler  NS_AVAILABLE_IOS(4_0);- (UIBackgroundTaskIdentifier)beginBackgroundTaskWithName:(NSString *)taskName expirationHandler:(void(^)(void))handler NS_AVAILABLE_IOS(7_0);

好,那我們來開始一個背景工作:

    myTask = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{// 背景工作到期執行,好像是10分鐘}];

執行上面這句話後,當你的 App 再次進入後台時就不會被馬上暫停了。但是我們不能濫用這個,為了自己的App負責,也為使用者的 iPhone 負責,關鍵是濫用的話 App Store 審核那也過不去的...

Stop

所以,有開就有關:

    [[UIApplication sharedApplication] endBackgroundTask: myTask];myTask = UIBackgroundTaskInvalid;

另外 UIApplication 還提供兩個個屬性 backgroundTimeRemaining 和backgroundRefreshStatus,可自行研究...

註:關於這個時間問題,筆者也有些不解,在測試的時候 ExpirationHandler 會在 180 秒左右,也就是 3 分鐘的時候觸發,但背景工作還是在繼續。求大神解惑!

參考文章:

  • iOS App Programming Guide - App States and Multitasking
  • Hour 21: Building Background-Aware Applications
  • Continue uploading process in background IOS

iOS 背景工作之 Long-running background task

聯繫我們

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