Why is my app getting killed? app在后台被终止的原因

Why is my app getting killed? app在后台被终止的原因本篇也是学习笔记,有点上头,一天看了好几个WWDC session , 快速学习然后吸收的感觉挺爽的. 类似皮克斯去年的动画 “心灵旅程” 的心流状态. hhhhh 主要介绍在APP在后台被系统杀死的六种主要原因,并且告诉你怎么使用MetricKit框架去发现和减少程序被强制杀…

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时尽快结束任务

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/13825.html

(0)

相关推荐

  • 基于C++的AI贪吃蛇

    基于C++的AI贪吃蛇访问【WRITE-BUG数字空间】_[内附完整源码和文档] 用C++做了个有AI功能的贪吃蛇小游戏,希望大家enjoy it. 总体概况 开发环境:VIsual Studio 2017 开发语言:C+

    2023-11-14
    134
  • idea注册激活码_autocad2014注册激活

    idea注册激活码_autocad2014注册激活IDEA是Java常用的开发工具,由于其强大的功能,使用起来也是极其的方便。这里我主要分享一下有关IDEA的安装以及注册的教程。来提高大家的效率

    2023-03-23
    335
  • Redis哨兵机制总结与实践

    Redis哨兵机制总结与实践文章简介 本文将通过理论+实践的方式从头到尾总结Redis中的哨兵机制。文章内容从主从复制的弊端、如何解决弊端、什么是哨兵、哨兵监控的图形结构、哨兵监控的原理、如何配置哨兵、哨兵与主从复制的关系等方…

    2023-04-13
    152
  • MySQL学习笔记-day01

    MySQL学习笔记-day011、数据库概述及数据准备 1.1、SQL概述 SQL,全称Structured Query Language,SQL用来和数据库打交道,完成和数据库的通信,SQL是一套标准。(90%以上的SQL都是通

    2023-05-11
    149
  • 数据库 国产化_数据库厂商

    数据库 国产化_数据库厂商’天底下没有完美的数据库,也许Oracle是个例外”,前阵子几个DBA在讨论国产化替代时,有人就这么说。确实是的,Oracle算是比较完美的数据库产品了,不过现在很多用户都在面临从Oracle数据库向

    2023-06-20
    169
  • Android生命周期组件Lifecycle遇上高德地图[亲测有效]

    Android生命周期组件Lifecycle遇上高德地图[亲测有效]最近在学习jetpack,正好项目中的地图方面的功能需要优化,所以正好使用Lifecycle优化下代码。 Lifecycle 是具有生命周期感知能力的组件,这样可以解决activity和fragment中的生命周期问题。 因为项目中BaseActivity是继承的AppComp…

    2023-08-14
    152
  • SQL中的函数——Round()函数「终于解决」

    SQL中的函数——Round()函数「终于解决」Round(exp1,exp2)函数具有四舍五入的功能,分为以下两种情况: 1.exp2数为非负 四舍五入的位数从小数点后开始计数,小数点后|exp2|位,看後一位,进本位,后面舍去 select R

    2023-02-20
    159
  • 深入分析Mimikatz:SSP

    深入分析Mimikatz:SSP在前一篇文章中,我们开始深入分析Mimikatz。我们的想法很简单,就是想澄清Mimikatz内部的工作原理,以便开发自定义和有针对性的payload。微软引入了一些安全控制机制(如Credential Guard),避免攻击者转储凭据信息。在本文中,我们将回顾一下绕过这种机制…

    2023-08-02
    150

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注