簡體   English   中英

調用applicationDidEnterBackground之后,我有多少時間?

[英]How much time do I have after applicationDidEnterBackground invoked?

我想將時間戳發送到遠程服務器,並等待成功的回調,如果遠程服務器沒有響應,則將時間戳存儲在本地。

我可以將其放入applicationDidEnterBackground實現中嗎?

根據iOS開發者庫UIApplicationDelegate協議參考

此方法的實現大約需要五秒鍾來執行任何任務並返回。 如果您需要更多時間來執行任何最終任務,則可以通過調用beginBackgroundTaskWithExpirationHandler:從系統中請求其他執行時間。 實際上,您應該盡快從applicationDidEnterBackground:返回。 如果該方法在時間用完之前沒有返回,則您的應用程序將終止並從內存中清除。

在退出此方法之前,您應該執行與調整用戶界面有關的所有任務,但是其他任務(例如保存狀態)應根據需要移至並發調度隊列或輔助線程。 因為在applicationDidEnterBackground:中啟動的任何后台任務很可能要等到該方法退出后才會運行,因此在啟動這些任務之前,您應該請求額外的后台執行時間。 換句話說,首先調用beginBackgroundTaskWithExpirationHandler :,然后在調度隊列或輔助線程上運行任務。

因此,您大約有5秒鍾的時間來執行任何任務並返回“ applicationDidEnterBackground”方法。

如果您想在進入后台之前進行任何網絡工作,則應使用beginBackgroundTaskWithExpirationHandler:要求額外的時間。

您可以在dispatch_async中執行此操作,並且可以等待服務器應答並對數據執行某些操作,但是您不能停止輸入背景...

試試這個代碼

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM