cf卡85进度条然后闪退修复后保持进度

966,690 七月 独立访问用户
语言 & 开发
架构 & 设计
文化 & 方法
您目前处于:
iOS启动连续闪退保护方案
iOS启动连续闪退保护方案
日. 估计阅读时间:
智能化运维、Serverless、DevOps......2017年有哪些最新运维技术趋势?!
为了尝试解决这个问题,微信读书开发了 iOS 连续闪退保护工具:,检测连续闪退,在连续闪退出现时,尝试自修复 App:
本文探讨了连续闪退问题的产生原因、检测、修复机制,以及如何在你的项目中引入、测试和使用。
连续闪退检测
相关厂商内容
相关赞助商
CNUTCon全球运维技术大会,9月10日-9月11日,上海&光大会展中心大酒店,
首先要检测用户 App 出现了连续闪退的情况,有两种检测方法,捕获异常和计时器。
1. 捕获异常
检测连续闪退,可以通过捕获异常来实现,异常有以下种类:
Mach 异常:EXC_CRASH
UNIX 信号:SIGABRT
NSException 异常:应用层,通过 NSUncaughtExceptionHandler 捕获
在念茜的一文中详细介绍了 Mach 异常和 Unix 信号捕获 crash 的机制。简单来说,异常一般产生自 iOS 的微内核 Mach,然后在 BSD 层转换成 UNIX SIGABRT 信号,以标准 POSIX 信号的形式提供给用户。NSException 是使用者在处理 App 逻辑时,用编程的方法抛出。
如何捕获异常
通过以下方法捕获异常:
利用 Mach API 捕获 Mach 异常
通过 POSIX API 注册 signal(SIGSEGV,signalHandler) 来捕获 UNIX 异常信号
注册 NSUncaughtExceptionHandler 来捕获应用级异常
Crash 上报工具如 PLCrashReporter 通过注册 Mach 异常 + UNIX信号 的 handler 达到检测的目的,对用户提供了处理异常的接口。
可以利用 PLCrashReporter 这类工具来检测连续闪退:
首先维护一个计数变量,表示连续闪退次数
在 PLCrashReporter 的 crash handler 中加入逻辑:如果启动 5s 内 crash 使计数器加一
每次启动时,如果连续闪退计数 & n,则检测到了连续闪退
启动后,执行一个定时任务,在 5s 后重置计数(如果 App 连续闪退则不会重置)
通过 Mach 异常、Unix 信号、NSException 异常来检测闪退,能获得更多的 crash 上下文,但由于 crash 收集框架多使用这些方法,可能会有这样的风险:与第三方 crash 收集框架冲突导致漏检测。另外,可能会与 App 已有的异常处理代码产生耦合。
2. 计时器方法
除了通过捕获异常的方式检测连续闪退,还可以通过计数器方法来检测:
维护一个计数变量,用于表示连续闪退的次数
在启动 application:didFinishLaunchingWithOptions: 后使计数加一
接着使用 dispatch_after 方法在 5s 后清零计数,如果 App 活不过 5 秒计数就不会被清零
如果发现计数变量 & n,表明 App 连续 n 次连续闪退,启动保护流程,重置计数。
当保护流程完成后,进入 App 正常启动流程
而计数器方法逻辑简单,与原有的代码耦合小。虽然有误报可能(在启动后立即被 kill 掉,误认为 crash),但是可以通过设置阈值来减小误报的误报率。
综上权衡,我们使用计时器方法检测连续闪退。
连续闪退修复
检测到连续闪退后,接下来要尝试对闪退进行修复,这里先分析可能的闪退原因,再结合微信读书的例子说明修复流程。
连续闪退,可能是 App 启动关键路径中执行了必 crash 的代码,原因可能有:
数据库损坏:在日常使用如异常退出、断电,或者错误的操作(参考:)。
文件损坏:处理文件时如果没有 @try...catch,损坏文件会抛出 NSException 导致 crash
网络返回数据处理异常:比如预期返回数组,但实际返回了字典,对字典对象执行 -objectAtIndex 方法会产生 crash: unknow selector send to object;,或返回破损的 Tar 包,在解压失败导致 crash。
代码 bug:当必 crash 的代码出现在启动关键路径中,就会导致连续闪退。
针对 1,可以通过工具修复数据库,或者删除 DB。针对2,可以删除文件来进行修复。对于 3 和 4,我们需要具体地分析 crash 案例,通过 JSPatch 来进行修复。
微信读书的修复流程
为了应对上述导致连续闪退的原因,微信读书的修复流程为:
进入 didFinishLaunch 时检查是否有连续闪退,无则执行 5
弹 Toast 提示用户是否修复,轻触『修复』执行2,否则执行 5
尝试下载并执行 JSPatch 补丁
这里是为了解决上述第4点 - 代码 bug 导致的闪退,使用 JSPatch 可以进行热修复。在 didFinishLaunching 时,会卡住界面发请求检查是否有可用的 JSPatch 脚本,如果有则加载执行,解决代码 bug 导致的闪退。
尝试删除 Documents / Library / Caches 目录下的所有文件
这里直接删除了所有用户数据,适用于微信读书这种所有数据都在云端,删除后可以完全从云端恢复。如果你的 App 不属于这种场景,那么应该在 repairBlock 中自定义修复逻辑,比如:
a. 不删除文件,只修复数据库b. 修复前把用户数据备份到云端c. 收集 crash 样本,查明原因,定制 JSPatch 修复补丁并下发
退出微信读书登录状态
进入原 didFinishLaunch
连续闪退检测 + 保护流程如图所示:
检测和连续 crash 并修复需要修改原 -application:didFinishLaunchingWithOptions: 逻辑,有几种方法:
直接修改 -application:didFinishLaunchingWithOptions: 方法。
新建一个 SubAppDelegate 类来继承 AppDelegate,覆盖 -application:didFinishLaunchingWithOptions: 方法,然后把 main() 函数中的 AppDelegate 替换为 SubAppDelegate
新建一个 AppDelegate 扩展,然后用 method swizzle 的方法替换 -application:didFinishLaunchingWithOptions: 方法。
上述三种方案,对现有项目改动代价是 1 & 2 & 3。因此,我们使用对源码修改代价最小的方案 3 来替换 -application:didFinishLaunchingWithOptions:。
检测的逻辑 GYBootingProtection 已经处理好,修复的处理预留了接口,可以由用户自定义,把自定义的修复流程传入 repairBlock 即可。
源码 ,将 src 目录下所有文件拖拽到你的 Xcode 项目
在 AppDelegate+GYBootingProtection.m 的 onBeforeBootingProtection 方法中添加检测前需要执行的代码,比如设置crash上报:- (void)onBeforeBootingProtection {
[GYBootingProtection setLogger:^(NSString *msg) {
// setup logger
NSLog(@"%@", msg);
[GYBootingProtection setReportBlock:^(NSInteger crashCounts) {
// setup crash report
在 onBootingProtection 方法中添加修复逻辑,比如删除文件:- (void)onBootingProtection {
// 检查 JSPatch 更新
// 删除 Documents Library Caches 目录下所有文件
[GYBootingProtection deleteAllFilesUnderDocumentsLibraryCaches];
如需执行异步的修复逻辑,在 onBootingProtectionWithCompletion: 方法添加修复逻辑,并在完成修复后调用 completion :- (void)onBootingProtectionWithCompletion:(BoolCompletionBlock)completion {
[self onBootingProtection];
// 异步修复
[self asyncRepairWithCompletion:^(void) {
// 正常启动流程
if (completion) completion();
首先制造连续闪退场景:
启动后 5 秒内,双击 Home 通过上划手势 kill 掉 App,重复多次。(也可以在代码里人为制造crash)
当连续闪退超过 5 次时,会提示用户修复:
用户轻触修复,App 重置初始状态,连续闪退问题解决:
查看原文:
感谢对本文的审校。
给InfoQ中文站投稿或者参与内容翻译工作,请邮件至。也欢迎大家通过新浪微博(,),微信(微信号:)关注我们。
Author Contacted
告诉我们您的想法
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p
当有人回复此评论时请E-mail通知我
赞助商链接
InfoQ每周精要
订阅InfoQ每周精要,加入拥有25万多名资深开发者的庞大技术社区。
架构 & 设计
文化 & 方法
<及所有内容,版权所有 &#169;
C4Media Inc.
服务器由 提供, 我们最信赖的ISP伙伴。
北京创新网媒广告有限公司
京ICP备号-7
找回密码....
InfoQ账号使用的E-mail
关注你最喜爱的话题和作者
快速浏览网站内你所感兴趣话题的精选内容。
内容自由定制
选择想要阅读的主题和喜爱的作者定制自己的新闻源。
设置通知机制以获取内容更新对您而言是否重要
注意:如果要修改您的邮箱,我们将会发送确认邮件到您原来的邮箱。
使用现有的公司名称
修改公司名称为:
公司性质:
使用现有的公司性质
修改公司性质为:
使用现有的公司规模
修改公司规模为:
使用现在的国家
使用现在的省份
Subscribe to our newsletter?
Subscribe to our industry email notices?
我们发现您在使用ad blocker。
我们理解您使用ad blocker的初衷,但为了保证InfoQ能够继续以免费方式为您服务,我们需要您的支持。InfoQ绝不会在未经您许可的情况下将您的数据提供给第三方。我们仅将其用于向读者发送相关广告内容。请您将InfoQ添加至白名单,感谢您的理解与支持。为什么手机上用mine模拟器玩游戏保存不了进度?点击保存后就直接闪退,在开启来后进度就全没了。求各-_星空见康网
为什么手机上用mine模拟器玩游戏保存不了进度?点击保存后就直接闪退,在开启来后进度就全没了。求各
为什么手机上用mine模拟器玩游戏保存不了进度?点击保存后就直接闪退,在开启来后进度就全没了。求各50分
求各位大大们指点!?点击保存后就直接闪退为什么手机上用mine模拟器玩游戏保存不了进度,在开启来后进度就全没了!
百度搜索葫芦侠,里面有很多专业人士研究手机游戏,有你想要的
我也是经常被卡退。
更新了吗?
呃.....基本我们都在纠结闪退,纠结安装的我还就见过你一个..... 然而基本上只要下载安装就好了...
为什么我把游戏放到mine的文件夹里,当我从mine里点开的时候会闪退?
尊敬的三星用户您好: 根据您的描述,建议您按照以下方法尝试:1.建议您将此软件卸载重新安装尝试。2....
把Mine模拟器下载到手机上安装之后添加ONS游戏路径就可以了。
解压后将游戏文件夹放入sdcard中的mine文件夹中。
我不是很清楚,大概要越狱吧,你去ONS模拟器吧看看 导航帖:【不看请闭嘴系列】ONS模拟器吧--吧规...
手机玩galgame大部分只能用模拟器运行。 模拟器参考:ons,mine,krkr2(比较稳定),...
下载对应的游戏文件后模拟器里会显示游戏,直接点击就可以了,不过一定是适用这个模拟器
这个模拟器没用过
1.检查游戏本体安装位置,不要安装在外置的内存卡里,放到手机的存储里 2.如果还是闪退,打开手机的设...查看: 3052|回复: 14
QQ火钻189 最后登录积分5435注册时间帖子
专家曼陀罗, 积分 5435, 距离下一级还需 4565 积分
QQ&&广西一区&&全模式游戏进度一到85%就闪退,昨天更新后开始的,现在还没得,麻烦帮反馈下什么时候可以的啊
QQ火钻189 最后登录积分5435注册时间帖子
专家曼陀罗, 积分 5435, 距离下一级还需 4565 积分
火钻0 最后登录积分20775注册时间帖子
专家夜玫瑰, 积分 20775, 距离下一级还需 4225 积分
麻烦请楼主提供一下QQ和大区& &电脑系统。是什么模式下闪退的!
麻烦发一下崩溃文件帮助官方更好的寻找闪退原因 谢谢
游戏出现闪退的玩家请进,需要您的配合
如果有崩溃文件,可以按照上面帖子里的说明,发到相关邮箱,方便官方定位问题,谢谢
QQ火钻0 最后登录积分40注册时间帖子
新锐奥摩, 积分 40, 距离下一级还需 10 积分
一样的问题,QQ
山东一区 W7旗舰 进所有房间加载85%闪退桌面
火钻0 最后登录积分10注册时间帖子
新锐奥摩, 积分 10, 距离下一级还需 40 积分
windows 7 64位 载入 游戏界面85%闪退到桌面(之前好好的)
QQ: 吉林一区
火钻0 最后登录积分10注册时间帖子
新锐奥摩, 积分 10, 距离下一级还需 40 积分
我试过将老版本的游戏部分文件进行复制
随后进行更新才能解决这个问题、这次是第二次遇到了。
强烈建议推出CF等游戏文件完整性检测修复下载工具。
火钻280 最后登录积分14716注册时间帖子
专家潘多拉, 积分 14716, 距离下一级还需 284 积分
我也是这个问题 北京二区的
火钻280 最后登录积分14716注册时间帖子
专家潘多拉, 积分 14716, 距离下一级还需 284 积分
win8 操作系统 已经好几天了
所属战队......火钻0 最后登录积分5注册时间帖子
新锐奥摩, 积分 5, 距离下一级还需 45 积分
我的也是 待二次遇到了&&第一次卸载重装了 看来这次也要重装,不知道腾讯干什么吃的,888的武器到没少出,一个游戏天天问题不断,早就有的问题现在一点进展没有 ,我的好像tgp优化过后就85%闪退
火钻0 最后登录积分5注册时间帖子
新锐奥摩, 积分 5, 距离下一级还需 45 积分
是因为电脑是Windows7所以不行,得等他们官方想办法解决了,毕竟cf这个游戏也不是腾讯原创的,肯定出了问题他们不能及时修复,肯定要自己再慢慢摸索怎么办
火钻0 最后登录积分25注册时间帖子
新锐奥摩, 积分 25, 距离下一级还需 25 积分
本帖最后由 RPh8G 于
09:02 编辑
为什么我一进游戏到85就无提示闪退到桌面WIN7系统64位移动专区QQ好像是TGP深度优化后就开始的
QQ火钻0 最后登录积分50注册时间帖子
新锐赛斯, 积分 50, 距离下一级还需 100 积分
我也是不管是什么模式,人机也一样到85%就退了,修复都没用。
所属战队尔等不过蝼蚁火钻0 最后登录积分10注册时间帖子
新锐奥摩, 积分 10, 距离下一级还需 40 积分
我也是不管是什么模式,人机也一样到85%就退了,修复都没用。
就是 人机都打不了
火钻0 最后登录积分25注册时间帖子
新锐奥摩, 积分 25, 距离下一级还需 25 积分
皇爷爷爷爷 发表于
win8 操作系统 已经好几天了
QQ火钻0 最后登录积分2886注册时间帖子
精英黑鹰, 积分 2886, 距离下一级还需 2114 积分
我也是这样
Powered by

我要回帖

更多关于 cf卡85进度条然后闪退 的文章

 

随机推荐