我的应用程序非常类似于健身追踪器,我有以下我在iphone 5s和5c上重现的错误: 当我开始跟踪运行时,在某些条件下,应用程序在后台运行时会被杀死。
条件似乎是:
我设法在设备上获取崩溃日志,并对报告进行了表示,但它并没有给我任何提示。它只是提到了它接收错误的通用反应原生js和ios类。
我正在使用bugsnag收集崩溃报告,但在这种情况下,它不会提交任何报告(可能是因为该应用程序被杀,而且还没有时间提交报告)。
谢谢!
崩溃日志中的有趣位:
Exception Type: EXC_CRASH (SIGKILL)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY
Termination Reason: Namespace <0xF>, Code 0x8badf00d
Triggered by Thread: 0
xcrun atos -arch arm64 -o appDsyms/4C682DF9-82D7-342C-ABC3-6218A1EED4F6.dSYM/Contents/Resources/DWARF/MyApp -l 0x100074000 0x000000010007b2bc 0x00000001001452f4 0x0000000100145318 0x00000001000aba84
main (in MyApp) (main.m:16)
ksmachexc_i_handleExceptions (in MyApp) (KSCrashSentry_MachException.c:237)
ksmachexc_i_handleExceptions (in MyApp) (KSCrashSentry_MachException.c:233)
+[RCTJSCExecutor runRunLoopThread] (in MyApp) (RCTJSCExecutor.mm:211)
答案 0 :(得分:1)
花了我很多年才了解发生了什么。永远无法从崩溃日志或bugsnag获得任何东西。
必须使用XCode在很长一段时间内对其进行分析才能了解发生了什么:我有内存泄漏。如果您的应用程序使用了太多内存并在后台运行,那么iOS会将其视为一个有害的应用程序而只是将其杀死。
简而言之,问题在于检测gps坐标并在UI上显示更新(我计算距离花费,平均速度和其他分析)是有限的。
因此在后台触发了redux操作,而UI上没有更新。最重要的是我在redux商店中存储gps坐标,经过一段时间后,它包含在一个巨大的数组中。这导致了大量不必要的处理+愚蠢的内存使用。
我通过分离那些
来修复它检索和存储gps坐标(只是在AsyncStorage中存储坐标,没有计算操作)
UI的更新:如果我有新的gps坐标并计算分析,则每秒更新计时器计算花费的时间+每2秒检查一次
当应用程序处于活动状态时,CPU和内存使用量大大减少,原因很简单,因为我停止使用redux来存储大量数据(它不是为了存储您的UI状态而不是存储的)。
当应用程序处于后台时,CPU和内存使用率变得完全平淡,因为我只存储内容。
所以我对这个主题有了新的认识!聪明,分开的关注。长期的概况。如果您有任何内存泄漏,请考虑您存储数据的位置和频率。如果你的应用程序在后台运行,请尽可能地限制此阶段的进展(避免还原更新,避免计算,以后再存储它)