2011-10-19 126 views
0

我的iOS應用程序不能在後臺運行。當主頁按鈕被擊中時,應用程序將終止。iOS:應用程序崩潰,錯誤「應用程序未能及時啓動」

下面是我的代碼

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    double sleepTime = [[UIApplication sharedApplication] backgroundTimeRemaining] - 1; 

    [self performTaskforTime:sleepTime]; 
} 

如果應用程序在任何時間重新啓動,應用程序的新實例將與錯誤被殺:

異常類型:00000020異常代碼:0x8badf00d突出顯示 主題:0

特定於應用程序的信息:My_App未能及時啓動

我不能減少睡眠時間。有沒有解決方案?

回答

0

你需要從- (void)applicationDidEnterBackground:(UIApplication *)application回報,做這樣的事情:

- (void)applicationDidEnterBackground:(UIApplication *)application 
{ 
    UIBackgroundTaskIdentifier btid = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:NULL]; 

    double sleepTime = [[UIApplication sharedApplication] backgroundTimeRemaining] - 1; 

    dispatch_async(/* background queue */, ^{ 
    [self performTaskforTime:sleepTime]; 
    [[UIApplication sharedApplication] endBackgroundTask:btid]; 
    } 
} 

你不想與一個長期運行的任務擋主隊列中,你將無法以其他方式提供服務的UI 。您的應用程序忙於-performTaskforTime:,因此無法及時啓動。

+0

我嘗試這樣做,因爲在後臺我的應用程序運行的犯規將退出,將永遠不會執行的任務。 – nanjunda

+0

更新了我的答案。你需要調用-beginBackgroundTaskWithExpirationHandler:在後臺運行。 – hypercrypt

0

您不能阻止主應用程序線程超過幾秒鐘。看到這個SO帖子。

Link

+0

我看到應用程序作爲新實例啓動,並且在新實例中線程未被阻止。 – nanjunda