在设备(iOS 8)上运行时,我认为系统可能正在暂停我的应用程序暂停对内存或运行后台任务太长时间。我怀疑这是因为当我恢复应用程序时,它已经返回到根视图控制器,除非应用程序重新启动,否则不应该这样。
但是,在查看设备日志时,我从未看到过崩溃报告。
如果系统终止您的应用,它是否会始终生成崩溃报告?
答案 0 :(得分:2)
如果应用程序被低内存杀死generates a low memory report:
当检测到内存不足的情况时,iOS中的虚拟内存系统依赖于应用程序的协作来释放内存。低内存通知作为释放内存的请求发送到所有正在运行的应用程序和进程,希望减少使用的内存量。如果内存压力仍然存在,系统可以终止后台进程以减轻内存压力。如果可以释放足够的内存,您的应用程序将继续运行,不会生成崩溃报告。如果没有,您的应用程序将被iOS终止,因为没有足够的内存来满足应用程序的需求,并且将生成低内存报告并将其存储在设备上。
低内存报告的格式与其他崩溃报告的不同之处在于,应用程序线程没有堆栈跟踪。每个进程的内存使用量按内存页数报告,每次写入时内存页数为4KB。您将在iOS终止的任何进程名称旁边看到“(jettisoned)”以释放内存。如果您在应用程序名称旁边看到它,则确认应用程序因使用太多内存而终止。
此报告通常可以在崩溃日志中看到,但是,根据我的经验,此日志无法保证。
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
)}