2013-04-03 2 views
1
TESTPRO_TEST[830] has active assertions beyond permitted time: 
     {(
      <BKProcessAssertion: 0x1fd48670> identifier: UIKitBackgroundCompletionTask process: TESTPRO_TEST[830] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:830 preventSuspend preventIdleSleep , 
      <BKProcessAssertion: 0x2083f190> identifier: UIKitBackgroundCompletionTask process: TESTPRO_TEST[830] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:830 preventSuspend preventIdleSleep 
     )} 
    <Warning>: Forcing crash report of DSC_TEST[830]... 
    <Warning>: Finished crash reporting. 
    [830] has active assertions beyond permitted time: 
     {(
      <BKProcessAssertion: 0x1fd48670> identifier: UIKitBackgroundCompletionTask process: [830] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:830 preventSuspend preventIdleSleep 
     )} 
    <Warning>: Forcing crash report of [830]... 
    <Error>: Multiple simulate crash requests for pid 830 
    <Warning>: Finished crash reporting. 
    <Warning>: pid_suspend failed for [830]: Unknown error: -1, Unknown error: -1 
    com.apple.launchd[1] (UIKitApplication:com.testPro.Test[0x4aff][830]) <Notice>: (UIKitApplication:com.testPro.Test[0x4aff]) Exited: Killed: 9 
    <Warning>: Application 'UIKitApplication:com.testPro.Test[0x4aff]' exited abnormally with signal 9: Killed: 9 
    �<Debug>: launchd[869] Builtin profile: container (sandbox) 
    <Debug>: launchd[869] Container: /private/var/mobile/Applications/3CF1EEC9-B6EF-45EA-999D-EBB9C02106EE (sandbox) 
    <Error>: Not saving crash log because we have reached the limit for logs to store on disk. Sync or otherwise clear logs from /var/mobile/Library/Logs/CrashReporter to save new logs. 
    <Error>: Could not save crash report to disk! 

Когда приложение входит фон, я добавил кодApp падает на вход фона в прошивкой

- (void) applicationDidEnterBackground:(UIApplication *) application 
{ 

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0; 
    UIBackgroundTaskIdentifier bgTask = 0; 
    UIApplication *app = [UIApplication sharedApplication]; 
    bgTask = [app beginBackgroundTaskWithExpirationHandler: ^{ 
     [app endBackgroundTask:bgTask]; 
    }]; 

} 

Катастрофа происходит, когда приложение входит background.Can кто поможет мне исправить эту аварию?

ответ

2

Причина очевидна - она ​​указана в журнале - ваше время истекло. Applications running background tasks have a finite amount of time in which to run them. (You can find out how much time is available using the backgroundTimeRemaining property.) If you do not call endBackgroundTask: for each task before time expires, the system kills the application.

Не думаю, что вы должны называть этот метод в applicationDidEnterBackground:. Попробуйте переместить его в соответствующее место (где вы начнете свою работу). Вы используете его для переноса длинных игровых процессов, которые также могут работать в bkg. Не судите о моем ответе строго, это только моя догадка, которая может стать правдой.

P.S. Вот хорошее объяснение What are beginBackgroundTaskWithExpirationHandler and endBackgroundTask methods

+0

Спасибо за ваш ответ. Но какое конечное количество времени для приложений работает в фоновом режиме? –

+1

Это какой-то постоянный Apple, но дело в том, что вы используете этот метод неправильно! Вы не должны называть его в 'applicationDidEnterBackground'. Лучше позвонить ему, прежде чем вы начнете какую-то задачу, и не забудьте в конце вызвать' endBackgroundTask'. Вот хорошее объяснение, что на самом деле 'beginBackgroundTaskWithExpirationHandler' http://stackoverflow.com/questions/12071726/how-to-use-beginbackgroundtaskwithexpirationhandler-for-already-running-task-in – Stas

+1

В iOS7 конечное количество времени для обычного приложения в фоновом режиме составляет 3 минуты, т.е. 180 секунд, а до iOS7 - 10 минут, т.е. 600 секунд. –

Смежные вопросы