[英]When waking up from significant location change notification how much time do I have in the background?
[英]How much time do I have after applicationDidEnterBackground invoked?
我想將時間戳發送到遠程服務器,並等待成功的回調,如果遠程服務器沒有響應,則將時間戳存儲在本地。
我可以將其放入applicationDidEnterBackground
實現中嗎?
根據iOS開發者庫UIApplicationDelegate協議參考
此方法的實現大約需要五秒鍾來執行任何任務並返回。 如果您需要更多時間來執行任何最終任務,則可以通過調用beginBackgroundTaskWithExpirationHandler:從系統中請求其他執行時間。 實際上,您應該盡快從applicationDidEnterBackground:返回。 如果該方法在時間用完之前沒有返回,則您的應用程序將終止並從內存中清除。
在退出此方法之前,您應該執行與調整用戶界面有關的所有任務,但是其他任務(例如保存狀態)應根據需要移至並發調度隊列或輔助線程。 因為在applicationDidEnterBackground:中啟動的任何后台任務很可能要等到該方法退出后才會運行,因此在啟動這些任務之前,您應該請求額外的后台執行時間。 換句話說,首先調用beginBackgroundTaskWithExpirationHandler :,然后在調度隊列或輔助線程上運行任務。
因此,您大約有5秒鍾的時間來執行任何任務並返回“ applicationDidEnterBackground”方法。
如果您想在進入后台之前進行任何網絡工作,則應使用beginBackgroundTaskWithExpirationHandler:
要求額外的時間。
試試這個代碼
dispatch_queue_t savingQueue = dispatch_queue_create("savingQue", NULL);
dispatch_async(savingQueue, ^{
//do something in bg....
dispatch_async(dispatch_get_main_queue(), ^{
});
});
dispatch_release(savingQueue);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.