日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

iOS后台任务

發布時間:2024/7/23 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 iOS后台任务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
一、概覽
1.從iOS4.0開始,系統添加了多任務特征,允許應用在按下Home鍵之后,繼續執行后臺任務。大部分應用在進入后臺之后就進入了掛起狀態,只有那些為用戶提供重要服務的App能夠在進入后臺之后繼續運行一段時間。
2.一般情況下,我們應該盡可能的避免讓我們的應用在進入后臺之后繼續執行代碼。如果必須要執行后臺任務,推薦使用以下幾種方式:(1)需要至少實現一種指定的用戶服務,這類服務可以獲得比較長的后臺運行時間。(2)執行有限時長的任務。(3)使用本地通知。
二、在執行多任務之前,首先需要判斷系統是否支持多任務:? ? ?UIDevice* device = [UIDevice currentDevice];? ? ?BOOL backgroundSupported = NO;? ? ?if ([device respondsToSelector:@selector(isMultitaskingSupported)]){? ? ? ? ? ?backgroundSupported = device.multitaskingSupported;? ? ?}
三、使用指定的用戶服務來啟動后臺任務:
1.在Info.plist中添加UIBackgroundModes鍵值,它包含一個或多個string的值,指定App需要的后臺服務,如果不指定相關的值,服務將不能在后臺執行。
2.可用的后臺服務包含一下幾個類型:(1)音頻播放服務,對應字符串:audio。(2)定位服務,對應字符串:location。(3)基于因特網的電話服務,對應字符串:voip。(4)Newsstand后臺下載服務,對應字符串:newsstand-content。(5)硬件訪問服務,對應字符串:external-accessory。(6)藍牙訪問服務,對應字符串:bluetooth-central。(7)外圍模式的藍牙交流服務,對應字符串:bluetooth-peripheral。
3.前面的每一個值都讓系統知道,應用需要在合適的時間被喚醒去響應相關的事件。也就是說,添加了對應的字符串值以后,直接使用對應服務的API實現服務即可,后臺任務會自動開啟;如果沒有添加對應的字符串值,即使使用對應的API實現了服務,當應用進入后臺狀態,服務會立即被終止。
4.每種服務具體的實現方式,可以參考蘋果技術文檔。
四、執行有限時長的任務
1.當應用進入后臺狀態之后,可以申請一小段時間來完成任何重要的任務。調用UIApplication的類方法:beginBackgroundTaskWithExpirationHandler,此方法會延遲App進入掛起狀態。
2.beginBackgroundTaskWithExpirationHandler方法返回一個后臺任務句柄。可以同時啟動多個后臺任務,每個后臺任務都對應一個句柄,可以通過此句柄來判別對應的任務。
3.beginBackgroundTaskWithExpirationHandler該方法的參數是一個block,參數和返回值都為空,當可用的后臺運行時間趨近于0時,此block會被調用。在此block中,應該使用endBackgroundTask方法來結束后臺任務。如果后臺任務終止失敗,應用將會被強制關閉。此block在主線程同步調用。
4.每一個beginBackgroundTaskWithExpirationHandler方法,都必須對應一個endBackgroundTask方法。endBackgroundTask方法可以在非主線程安全的調用。
5.當后臺任務代碼執行完畢之后,也需要實時的結束后臺任務。
6.結束后臺任務的規則:首先檢查任務句柄是不是等于UIBackgroundTaskInvalid,如果不等于,調用endBackgroundTask,然后將任務句柄賦值為:UIBackgroundTaskInvalid。
7.通過UIApplication的backgroundTimeRemaining屬性,可以獲知還有剩余多少后臺運行時間。
8.示例代碼:-(void)applicationDidEnterBackground:(UIApplication *)application{? ? //申請后臺運行時間? ? bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
? ? ? ? //清理沒完成的任務? ? ? ? xxxxxxxxxxxxxxxxxxxxxx ? ? ? ?
? ? ? ? //結束任務? ? ? ? if(bgTask != UIBackgroundTaskInvalid){? ? ? ? ? ? ?[application endBackgroundTask:bgTask];? ? ? ? ? ? ?bgTask = UIBackgroundTaskInvalid; ?? }? ? }];
? ? //開始執行任務,? ? dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{?? ? ? ? //執行必要的任務,以同步代碼的方式。? ? ? ? xxxxxxxxxxxxxxxx?? ? ? ? //結束任務? ? ? ? if(bgTask != UIBackgroundTaskInvalid){? ? ? ? ? ? ?[application endBackgroundTask:bgTask];? ? ? ? ? ? ?bgTask = UIBackgroundTaskInvalid; ?? }? ? });}
五、本地通知本地通知在"iOS中通知的使用"章節有介紹,在這里就不說了。

總結

以上是生活随笔為你收集整理的iOS后台任务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。