1. 程式人生 > >ios 開啟後臺任務,beginBackgroundTaskWithExpirationHandler 使用細節問題備忘

ios 開啟後臺任務,beginBackgroundTaskWithExpirationHandler 使用細節問題備忘

app進入後臺,會停止所有執行緒;需要在applicationDidEnterBackground中呼叫beginBackgroundTaskWithExpirationHandler申請更多的app執行時間,以便結束某些任務,如

AVAssetWriter的(ios中當AVAssetWriter處於AVAssetWriterStatusWriting狀態時,若進入了後臺狀態將導致後續操作失敗,詳情檢視startWriting的註釋說明)

使用記錄:

1,

可以在 AppDelegate中的applicationDidEnterBackground 中申請

由於在 AppDelegate 很多時候不方便呼叫結束指定工作的方法 也可以通過

[[NSNotificationCenterdefaultCenter]addObserver:selfselector:@selector(applicationDidEnterBackground:)name:UIApplicationDidEnterBackgroundNotificationobject:nil];

在合適的地方新增委託

2,

根據網上資料添加了委託

- (void)applicationDidEnterBackground:(UIApplication *)application {
    _backtaskIdentifier = [application beginBackgroundTaskWithExpirationHandler:^(void){
        if (_backtaskIdentifier!=UIBackgroundTaskInvalid) {
            [[UIApplication sharedApplication] endBackgroundTask:_backtaskIdentifier];
            _backtaskIdentifier = UIBackgroundTaskInvalid;
        }
    }];
}


結果呼叫beginBackgroundTaskWithExpirationHandler報錯:

NSInvalidArgumentException', reason: '-[NSConcreteNotification beginBackgroundTaskWithExpirationHandler:]: unrecognized selector sent to instance

其中[NSConcreteNotification beginBackgroundTaskWithExpirationHandler:] 明顯有問題,

原因是此處的引數application並非 uiapplication型別,需要將程式碼改為

    _backtaskIdentifier = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void){
        if (_backtaskIdentifier!=UIBackgroundTaskInvalid) {
            [[UIApplication sharedApplication] endBackgroundTask:_backtaskIdentifier];
            _backtaskIdentifier = UIBackgroundTaskInvalid;
        }
    }];


3, 一開始沒想明白beginBackgroundTaskWithExpirationHandler 的用法,經過測試才明白,只要呼叫了此函式系統就會允許app的所有執行緒繼續執行,直到任務結束(1,[[UIApplicationsharedApplication]backgroundTimeRemaining] 的時間結束 2,呼叫endBackgroundTask)

相關推薦

ios 開啟後臺任務beginBackgroundTaskWithExpirationHandler 使用細節問題

app進入後臺,會停止所有執行緒;需要在applicationDidEnterBackground中呼叫beginBackgroundTaskWithExpirationHandler申請更多的app執行時間,以便結束某些任務,如 AVAssetWriter的(ios中當A

關於std::thread以及std::condition_variable的一些細節

tor enc action sim cep 關於 pro swap not   也算是看過不少多線程相關的資料了,但是一直對於其中的一些細節沒有太好的把握,比如std::thread線程真正開始運行的時機,比如join、detch等真正的作用。 跟著《Cplusplus

轉載大牛所寫內容MAC 訊息驗證編碼的使用和相關概念非我所寫我只是檢視並加註解一些紅色字型內容

  資訊保安基礎知識 MAC訊息驗證碼及金鑰管理問題   版權宣告:本文為博主原創文章,未經博主允許不得轉載。 原文地址https://blog.csdn.net/a359680405/article/details/41518685   &n

Linux下清除快取 drop_cachessysctl(

1. 用命令 free -m 檢視一下記憶體的使用情況:然後清除快取後再來檢視一下記憶體的使用情況:前後對比可發現,快取由之前的110M縮小到了25M,效果比較明顯。2. 下面說一下 drop_caches:清空 pagecache:syncecho 1 > /proc

【nginx】把自己的nginx配置貼上來做個

#user nobody; #執行使用者 worker_processes 1; #啟動程序,通常設定成和CPU數量相等 #全域性錯誤日誌及錯誤記錄型別 #錯誤型別 [ debug | info | notice | warn | error | crit ]

IOS 後臺掛起程式 當程式到後臺繼續完成定位任務

// 當應用程式掉到後臺時,執行該方法 - (void)applicationDidEnterBackground:(UIApplication *)application { } 當一個 iOS 應用被送到後臺,它的主執行緒會被暫停。你用 NSThre

背水一戰 Windows 10 (119) - 後臺任務: 後臺下載任務任務分組組完成後觸發後臺任務

mode present llb ner tina when http 對象 pat [源碼下載] 背水一戰 Windows 10 (119) - 後臺任務: 後臺下載任務(任務分組,組完成後觸發後臺任務) 作者:webabcd介紹背水一戰 Windows 10 之 後

背水一戰 Windows 10 (118) - 後臺任務: 後臺下載任務任務分組並行或串行執行組完成後通知)

style 如何 abs bin html5 only emp void local [源碼下載] 背水一戰 Windows 10 (118) - 後臺任務: 後臺下載任務(任務分組,並行或串行執行,組完成後通知) 作者:webabcd介紹背水一戰 Windows 10

關於ios 11.X後微信wifi認證無法開啟微信無法重定向到weixin:開頭網址等問題的處理

環境:   認證路由ROS ,認證後臺python django ios11系統 更新以來先後出現微信wifi認證,無法開啟微信,無法重定向到weixin:開頭網址等相關問題。     經過問題的收集,查詢到網路上此類問題普遍存在 收集到的有如下網址,市面上大多數廠商在使用

mxnet-等待後臺任務完成後臺完成自動並行化

n = 10 a = mx.nd.ones((1000,1000)) b = mx.nd.ones((6000,6000), gpu_device) tic = time.time() c = do(a, n) wait(c) print('Time to finish the CPU workload: %

關於iOS後臺下載和斷點續傳說一說自己的理解

http://blog.csdn.net/openglnewbee/article/details/53887308 首先,後臺下載和斷點續傳是兩件事;這裡放在一起說是為了圖個方便,實際二者在技術實現上沒有什麼關聯。 目前我們的下載實現一般都是基於nsurlsession

python celery捕捉unicode字元型別的錯誤導致後臺任務失敗的解決方案

背景 公司有一個用django(1.8.0)寫的運維平臺,目的用於申請阿里雲和騰訊雲機器;申請雲上機器採用後臺非同步的方式,框架採用redis+celery(3.1.18),但最近發現一個問題,就是有時候申請騰訊雲機器的後臺任務因為沒有捕捉到某些異常,導致任務會

定期iOS後臺位置更新-- 相關資料收集待有時間進行整理

1,材料一:(http://codego.net/610454/) 我正在寫,需要具有高精確度和低頻率的後臺位置更新的應用程式。該解決方案似乎是一個後臺任務的啟動位置管理器的更新,然後關機。這個問題已經被問過: 我如何獲得一個後臺位置更新每隔n分鐘在我的iPh

iOS下的後臺任務實現方法

後臺任務 場景一 地圖後臺定位   場景二 後臺播放音樂 場景三  後臺 更新推送內容  場景四  voip  IP電話   視訊通話 關於Background Fet

IOS後臺常駐實現後臺下載

上班快一個月了,好久沒有更新過部落格,正好公司做的專案讓解決後臺下載的問題,在網上有查到一般都是通過後臺播放無聲或者VOIPSocket防止程式終結,但是沒有相關功能會有被App Store拒絕上架的可能,我僅僅想完成一個後臺下載。 我的Xcode版本7.

後臺任務: 後臺下載任務任務分組並行或序列執行組完成後通知)

/* * 演示後臺下載任務的分組,以及如何設定組內任務是並行執行還是序列執行,以及組任務全部完成後如何 toast 或 tile 通知) * * BackgroundTransferGroup - 後臺下載任務的分組物件 * static BackgroundTransferGr

IOS常用延遲呼叫後臺呼叫主執行緒呼叫方法

/延遲呼叫 [selfperformSelector:@selector(doSomeThing:) withObject:nilafterDelay:1.0f]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int

:CentOS-7 使用systemctrl 管理的服務檔案開啟數上限1024要改

改要 檔案 中 /etc/systemd/system.conf  以下兩個值 DefaultLimitNOFILE=1024000 DefaultLimitNPROC=1024000 並且要重啟機器 --- 反正 我是直接重啟機器 如不改,systemctrl sta

ios 後臺下載app退出再進入可以斷點續傳 NSURLSessionDownloadTask(一)

想了解,多檔案下載和管理,看這一篇文章,是在這基礎上再次封裝的:點選開啟連結 使用NSURLSessionDataTask,進行封裝下載的,看這篇文章 點選開啟連結 使用: #import "ViewController.h" #import "BackgroundDow

ios程式後臺執行時當有訊息推送過來如何修改程式角標上是數字

這個得在發訊息的伺服器中給你累加,客戶端只是被動的顯示applicationIconBadgeNumber值。當客戶端收到推送訊息時要告訴伺服器端,伺服器將applicationIconBadgeNumber置為0,當在後臺或未開啟時,不能告訴伺服器端,伺服器每發一條,就會