【发布时间】:2015-03-20 22:40:27
【问题描述】:
在设备上运行时(iOS 8),我认为系统可能会在我的应用程序暂停时终止我的应用程序,因为内存或后台任务运行时间过长。我怀疑这是因为当我恢复应用程序时它已经返回到根视图控制器,除非应用程序重新启动,否则这是不可能的。
但是,在查看设备日志时,我从未看到它的崩溃报告。
如果系统终止您的应用程序,它会始终生成崩溃报告吗?
【问题讨论】:
标签: ios crash-reports terminate
在设备上运行时(iOS 8),我认为系统可能会在我的应用程序暂停时终止我的应用程序,因为内存或后台任务运行时间过长。我怀疑这是因为当我恢复应用程序时它已经返回到根视图控制器,除非应用程序重新启动,否则这是不可能的。
但是,在查看设备日志时,我从未看到它的崩溃报告。
如果系统终止您的应用程序,它会始终生成崩溃报告吗?
【问题讨论】:
标签: ios crash-reports terminate
如果应用程序被内存不足杀死通常generates a low memory report:
当检测到内存不足的情况时,iOS 中的虚拟内存系统依靠应用程序的协作来释放内存。低内存通知作为释放内存的请求发送给所有正在运行的应用程序和进程,希望减少正在使用的内存量。如果内存压力仍然存在,系统可能会终止后台进程以缓解内存压力。如果可以释放足够的内存,您的应用程序将继续运行并且不会生成崩溃报告。否则,您的应用程序将被 iOS 终止,因为没有足够的内存来满足应用程序的需求,并且会生成内存不足报告并将其存储在设备上。
内存不足报告的格式不同于其他崩溃报告,因为它没有应用程序线程的堆栈跟踪。每个进程的内存使用情况以内存页数的形式报告,截至本文撰写时,每个进程的内存页数为 4KB。您将在任何被 iOS 终止以释放内存的进程名称旁边看到“(抛弃)”。如果您在应用程序名称旁边看到它,则表明该应用程序因使用过多内存而被终止。
这个报告通常可以在崩溃日志中看到,但根据我的经验,这个日志并不能保证。
An example of a memory report:
Incident Identifier: 30E46451-53FD-4965-896A-457FC11AD05F
CrashReporter Key: 5a56599d836c4f867f6eec76afee451bf9ae5f31
OS Version: iPhone OS 3.1.3 (7E18)
Date/Time: 2012-10-17 21:39:06.967 -0400
Free pages: 96
Wired pages: 10558
Purgeable pages: 0
Largest process: Rage Masters
Processes
Name UUID Count resident pages
Rage Masters <cc527ca9b51937c5adbe035fe27a7b12> 9320 (jettisoned) (active)
mediaserverd <3d3800d6acfff050e4d0ed91cbe2467e> 255
dataaccessd <13d80b2e707acc91f9aa3ec4c715b9cc> 505
syslogd <8eddddc00294d5615afded36ee3f1b62> 71
apsd <32070d91b216d806973c8f1b1d8077a4> 171
securityd <b9e51062610d27f727c5119b8f80dcdf> 243
notifyd <591dd4dd804b4b8741f52335ea1fa4ab> 2027
CommCenter <b4b87526ae086bb62c982f1078f43f81> 189
SpringBoard <324939a437d1cca1fa4af72d9f5d0eba> 2158 (active)
accessoryd <8f21c8b376d16e2ccb95ed6d21d8317a> 91
configd <85efd41aceac34ccc0019df76623c7a9> 371
fairplayd <a2eaf736b3e07c7c9a2c82e9eb893555> 93
mDNSResponder <df1cd275e4ad434e0575990e8e1da4cb> 292
lockdownd <80d2bd44c0bcca273d48ce52010f7e65> 1204
launchd <a5988245aade809bf77576f1d9de42c5> 72
其实这是crashlytics团队的问题之一trying to solve:
这些很棘手,因为这些事件实际上是与崩溃分开的事件。低内存事件的捕获很复杂,因为没有已知的方法可以使用公共 API 捕获低内存退出。
但是,我们正在开发一个系统,该系统将生成这些事件的记录。敬请期待!
关于后台崩溃通常你会得到一个类似this message:的崩溃日志
Application Specific Information:
MyMapApp[1234] has active assertions beyond permitted time:
{(
<SBProcessAssertion: 0x63a07a0> identifier: CoreLocationRegistration process: MyMapApp[1234] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:1234 preventSuspend preventIdleSleep ,
<SBProcessAssertion: 0xa095050> identifier: CoreLocationBackgroundClient process: MyMapApp[1234] permittedBackgroundDuration: 600.000000 reason: finishTask owner pid:1234 preventSuspend preventIdleSleep
)}
【讨论】: