应用程序进入后台以及iPad自动锁定时应用程序崩溃

时间:2016-08-08 13:13:50

标签: ios objective-c background

当我的应用程序进入后台模式并且iPad被锁定时,我在应用程序中遇到了一个奇怪的问题。直到它的工作正常但是当我解锁设备并从后台打开应用程序时,它崩溃了。

这是崩溃日志,我从设备

获取
Exception Type:  00000020
Exception Codes: 0x000000008badf00d
Exception Note:  SIMULATED (this is NOT a crash)
Highlighted by Thread:  8

Application Specific Information:
<BKNewProcess: 0x12cd18cb0; com.apps-factory; pid: 540; hostpid: -1> has active assertions beyond permitted time: 
{(
    <BKProcessAssertion: 0x12cd1e3b0> id: 540-72C6AF6C-F674-40E8-BA89-EFE4BF52F8D6 name: Called by UIKit, from <redacted> process: <BKNewProcess: 0x12cd18cb0; com.apps-factory; pid: 540; hostpid: -1> permittedBackgroundDuration: 180.000000 reason: finishTask owner pid:540 preventSuspend  preventIdleSleep  preventSuspendOnSleep 
)}

Elapsed total CPU time (seconds): 82.430 (user 82.430, system 0.000), 23% CPU 
Elapsed application CPU time (seconds): 77.475, 21% CPU

Filtered syslog:
None found

我的应用程序在屏幕上有连续的点动画,例如根据与服务器同步的数据库的降雨效果。

任何帮助都将受到高度赞赏。 在此先感谢!!

2 个答案:

答案 0 :(得分:3)

在调查Successfully created the table. Insert... Insert... Insert... Insert... Insert... Insert... Insert... 时,我确信崩溃背后的原因是由于crash log之后仍在进行后台提取。

所以,如果我在3分钟后没有错,它会杀死你的应用程序,当你重新打开它时它已经处于崩溃模式,所以不会直接运行。

我在我的应用中遇到同样的问题,所以为了解决这个问题,我已经通过3 mins (180 seconds)在我的代码中开始background task,如下所示:

AppDelegate

并且我们需要在Application委托方法

中结束该任务
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];

这就是为什么在你的崩溃报告中苹果明确提到操作系统只允许任何背景任务3分钟!

检查你的崩溃

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

    __block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
                [application endBackgroundTask:bgTask];
                bgTask = UIBackgroundTaskInvalid;
        //Save your state or data while invalidating bgTask.

        }];
}
  

allowedBackgroundDuration:180.000000        原因:finishTask所有者

表示我们在后台执行任务只需180秒,如apple documentation中所述。

如果您仍需要更多时间来执行任务,那么您需要启用具有特定原因的Application Specific Information: <BKNewProcess: 0x12cd18cb0; com.apps-factory; pid: 540; hostpid: -1> has active assertions beyond permitted time: {( <BKProcessAssertion: 0x12cd1e3b0> id: 540-72C6AF6C-F674-40E8-BA89-EFE4BF52F8D6 name: Called by UIKit, from <redacted> process: <BKNewProcess: 0x12cd18cb0; com.apps-factory; pid: 540; hostpid: -1> permittedBackgroundDuration: 180.000000 reason: finishTask owner pid:540 preventSuspend preventIdleSleep preventSuspendOnSleep )} ,否则Apple可能会拒绝您的应用。

希望这有助于解决您的崩溃问题。

答案 1 :(得分:0)

那就是读取内存转储或脚本运行时错误。对不起,如果它看起来有点明显,但你检查一下,当设备被锁定时,是否允许它在后台运行?你可以在权限下找到它