为什么我的app被终止了(iOS app后台Carsh)

Why is my app getting killed?
本篇也是学习笔记,有点上头,一天看了好几个WWDC session , 快速学习然后吸收的感觉挺爽的. 类似皮克斯去年的动画 "心灵旅程" 的心流状态. hhhhh
地址: 喜欢可以去详细观看
WWDC 2020 为什么我的app被终止了

概要

主要介绍在APP在后台被系统杀死的六种主要原因,并且告诉你怎么使用MetricKit框架去发现和减少程序被强制杀死的概率;怎么防止崩溃;怎么使用后台机制,怎么找到潜在的问题并采取行动去修复。

app在后台被终止的原因

崩溃(Crashes)
CPU资源限制(CPU resource limit)
看门狗(Watchdog)
内存超出系统限制(Memory limit exceeded)
内存自动清理(Memory pressure exit)
后台任务超时(Background task timeout)

使用MetricKit 框架收集的类型

cumulativeNormalAppExitCount:正常退出次数
cumulativeMemoryResourceLimitExitCount:内存OOM引起程序退出次数
cumulativeCPUResourceLimitExitCount:cpu资源超限引起退出次数
cumulativeMemoryPressureExitCount:系统内存自动清理引起退出次数
cumulativeBadAccessExitCount:非法访问(SIGSEGV/SIGBUS)引起退出次数
cumulativeAbnormalExitCount:Abort函数中止引起退出次数
cumulativeIllegalInstructionExitCount:非法指令(SIG)引起退出次数
cumulativeAppWatchdogExitCount:看门狗(WatchDog)引起的退出次数
cumulativeSuspendedWithLockedFileExitCount:后台读写文件引起的退出次数
cumulativeBackgroundTaskAssertionTimeoutExitCount:后台任务超时引起的退出次数

一. carsh

screenshot.png

解决方案:
这里大多数代码问题,请参考常规的carsh解决方案,查看日志等


截屏2021-02-27 下午10.24.00.png

二. Watchdog

在 app 关键切换期间长时间挂起等待 比如说打开、切到后台 然后再切到前台
这种切换有大概 20 秒的时间限制
如果附加了调试器 是不会发生这种终止情况的
出现看门狗 通常意味着发生了严重问题 比如说
1.死锁、
2.无限循环
3.在主线程上发生的其他无限同步工作

解决方案

使用Xcode查看和导出崩溃日志
使用 MXCrashDiagnostic 获取(见崩溃)

三. CPU resource limit(CPU资源限制)

发生CPU资源限制被系统终止的可能原因

后台长时间占用CPU资源过高(High sustained CPU load in background)

四. Memory limit exceeded(内存超出系统限制)

截屏2021-02-27 下午10.27.47.png
如何查看原因

后台的中央处理器内存占用持续很高时 系统会生成一份能量例外报告
如果此持续性工作的时间长到一定程度 系统会终止 app 的运行
如果内存占用太多 系统会在内存占用率超过界限值时 马上终止 app 的运行 前台和后台的占用率界限值一样

可以在 Xcode Organizer 中查看 中央处理器的资源例外日志
也能通过 MXCPUExceptionDiagnostic 查看

解决方案

这些报告包含调用栈 以此识别出 你的 app 在终止发生时正在做什么
也许你的代码里有漏洞 造成了中央处理器运行的任务过多 修改一下就好
但如果你需要在后台进行很高强度的工作
1.可以考虑把工作移入后台处理任务

注意 不同设备的界限值也不同 一般来说 设备越老 界限值越低 若你的 app 的目标设备早于 iPhone 6s 就需要尽量把内存占用量 始终控制在 200MB 以下

五. Memory pressure exit(内存自动清理)

发生原因

通常不是程序问题(Not a bug with you app)
(压力退出-自动清理)系统为了给其他APP内存而杀掉后台的程序机制

如何解决

尽量保证程序在后台占用内存小于50MB(Aim for less than 50MB in the background)

六. Background task timeout(后台任务超时)

执行后台任务时,未在30s内结束后台任务(Failure ro end the task explicitly result in termination.(in 30s))

如何发现?
iOS14控制台会有超时任务消息打印


image.png

使用MXBackgrounndExitData(iOS14 MetricKit)统计和发现

如何解决?
  1. 从前台转到后台时 可以通过调用指令 UIApplication.beginBackgroundTask 获得额外的运行时间完成关键工作 当工作完成时 需调用 endBackgroundTask 指令
  2. 30s内结束后台任务
  3. 检查后台任务的剩余时间

只有在时间足够的前提下开启任务
时间小于5s时尽快结束任务

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 220,063评论 6 510
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,805评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 166,403评论 0 357
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,110评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,130评论 6 395
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,877评论 1 308
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,533评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,429评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,947评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,078评论 3 340
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,204评论 1 352
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,894评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,546评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,086评论 0 23
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,195评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,519评论 3 375
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,198评论 2 357

推荐阅读更多精彩内容