当我的应用程序进入后台模式并且 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
我的应用程序在屏幕上具有连续的点动画,例如基于与服务器同步的数据库中的数据的降雨效果。
任何帮助将不胜感激。
提前致谢!!
最佳答案
看着你的 crash log
我确信您崩溃的原因是由于 3 mins (180 seconds)
之后仍在进行后台提取。 .
所以如果我在 3 分钟后没有错,它会杀死你的应用程序,当你重新打开它时,它已经处于崩溃模式,所以它不会直接运行。
我在我的应用程序中遇到了同样的问题,所以要解决这个问题,我必须开始 background task
在我的代码中通过AppDelegate
像这样:
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
然后我们需要在 Application 委托(delegate)方法中结束该任务
- (void)applicationDidEnterBackground:(UIApplication *)application {
__block UIBackgroundTaskIdentifier bgTask = [application beginBackgroundTaskWithExpirationHandler:^{
[application endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
//Save your state or data while invalidating bgTask.
}];
}
这就是为什么在你的崩溃报告中苹果明确提到操作系统只允许在后台执行任何任务 3 分钟!
检查您的崩溃:
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
)}
permittedBackgroundDuration: 180.000000 reason: finishTask owner
意味着我们只有 180 秒的时间在后台执行任何任务,如 apple documentation 中所述.
如果您仍然需要更多时间来执行您的任务,那么您需要启用您的
app background mode
有特定原因,否则苹果可能会拒绝您的应用。希望这将有助于解决您的崩溃问题。
关于ios - 当应用程序进入后台和 iPad 自动锁定时应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38830179/