当前位置: 首页 > news >正文

官方网站、门户网站是什么意思?高清电影下载

官方网站、门户网站是什么意思?,高清电影下载,互联网推广销售,wordpress安装完不显示版权声明#xff1a;本文由刘笑江原创文章#xff0c;转载请注明出处: 文章原文链接#xff1a;https://www.qcloud.com/community/article/79 来源#xff1a;腾云阁 https://www.qcloud.com/community 一.引言 “如果某个实体表现出以下任何一种特性#xff0c;它就具备…版权声明本文由刘笑江原创文章转载请注明出处: 文章原文链接https://www.qcloud.com/community/article/79 来源腾云阁 https://www.qcloud.com/community   一.引言 “如果某个实体表现出以下任何一种特性它就具备自主性自我修复、自我保护、自我维护、对目标的自我控制、自我改进。” —— 凯文·凯利 iOS App 有时可能遇到启动必 crash 的绝境每次打开 App 都闪退无法正常使用App。 为了尝试解决这个问题微信读书开发了 iOS 连续闪退保护工具GYBootingProtection检测连续闪退在连续闪退出现时尝试自修复 App 本文探讨了连续闪退问题的产生原因、检测、修复机制以及如何在你的项目中引入、测试和使用 GYBootingProtection。 二.连续闪退检测 首先要检测用户 App 出现了连续闪退的情况有两种检测方法捕获异常和计时器。 1.捕获异常 检测连续闪退可以通过捕获异常来实现异常有以下种类 Mach 异常EXC_CRASHUNIX 信号SIGABRTNSException 异常应用层通过 NSUncaughtExceptionHandler 捕获在念茜的漫谈 iOS Crash 收集框架一文中详细介绍了 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但是可以通过设置阈值来减小误报的误报率。 综上权衡我们使用计时器方法检测连续闪退。 三.连续闪退修复 检测到连续闪退后接下来要尝试对闪退进行修复这里先分析可能的闪退原因再结合微信读书的例子说明修复流程。 1.闪退原因 连续闪退可能是 App 启动关键路径中执行了必 crash 的代码原因可能有 数据库损坏在日常使用如异常退出、断电或者错误的操作参考sqlite corruption causes。文件损坏处理文件时如果没有 try...catch损坏文件会抛出 NSException 导致 crash网络返回数据处理异常比如预期返回数组但实际返回了字典对字典对象执行 -objectAtIndex 方法会产生 crash unknow selector send to object或返回破损的 Tar 包在解压失败导致 crash。代码 bug当必 crash 的代码出现在启动关键路径中就会导致连续闪退。针对 1可以通过工具修复数据库或者删除 DB。针对2可以删除文件来进行修复。对于 3 和 4我们需要具体地分析 crash 案例通过 JSPatch 来进行修复。2.微信读书的修复流程 为了应对上述导致连续闪退的原因微信读书的修复流程为 进入 didFinishLaunch 时检查是否有连续闪退无则执行 5弹 Toast 提示用户是否修复轻触『修复』执行2否则执行 5 尝试下载并执行 JSPatch 补丁 这里是为了解决上述第4点 - 代码 bug 导致的闪退使用 JSPatch [github]可以进行热修复。在 didFinishLaunching 时会卡住界面发请求检查是否有可用的 JSPatch 脚本如果有则加载执行解决代码 bug 导致的闪退。 尝试删除Documents /Library / Caches 目录下的所有文件 这里直接删除了所有用户数据适用于微信读书这种所有数据都在云端删除后可以完全从云端恢复。如果你的 App 不属于这种场景那么应该在 repairBlock 中自定义修复逻辑比如 a. 不删除文件只修复数据库b. 修复前把用户数据备份到云端c. 收集 crash 样本查明原因定制 JSPatch 修复补丁并下发 退出微信读书登录状态 进入原 didFinishLaunch连续闪退检测 保护流程如图所示 3.实现 检测和连续 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 即可。 4.使用 引入项目 下载 (github) 源码 将 src 目录下所有文件拖拽到你的 Xcode 项目 在 AppDelegateGYBootingProtection.m 的 onBeforeBootingProtection方法中添加检测前需要执行的代码比如设置crash上报 (void)onBeforeBootingProtection { [GYBootingProtection setLogger:^(NSString *msg) {// setup loggerNSLog(%, 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.测试 首先制造连续闪退场景 启动后 5 秒内双击 Home 通过上划手势 kill 掉 App重复多次。也可以在代码里人为制造crash 当连续闪退超过 5 次时会提示用户修复 用户轻触修复App 重置初始状态连续闪退问题解决 源码https://github.com/liuslevis/GYBootingProtection    转载于:https://www.cnblogs.com/purpleraintear/p/6024287.html
http://www.zqtcl.cn/news/533436/

相关文章:

  • 张家港专业做网站网站点击量 哪里查询
  • 网站设计软件开发论文网站建设的参考文献
  • 专业建筑工程网站陇西做网站的公司
  • 请别人做网站会不会被盗有创意的广告图片及赏析
  • qq官方网站在家有电脑怎么做网站
  • 做计量检定的网站网站建设专业可行性分析
  • 上饶市建设局网站电脑课做网站所需的软件
  • 广州论坛建站模板网站开发流程原理
  • 网站开发深入浅出 - python篇四川网络营销
  • 做外贸比较好用的网站有哪些网站logo教程
  • 自适应产品网站模板坪地网站建设信息
  • 如何免费推广网站简历生成网站
  • 专业建站开发影视软件开发定制
  • jsp网站开发什么框架中山h5模板建站
  • 网页qq登陆网站旅游网站开发的国内外现状
  • 电影发布网站模板天津网络维护公司
  • 如何用ae做模板下载网站平面设计线上培训机构
  • 地方宣传网站建设的必要性汕头企业网站建站模板
  • html网站源代码网站非法字符过滤
  • 江苏盐城建筑公司网站网络服务提供商是指什么
  • 汕头网站搜索优化视频广告制作
  • 靖边县建设局网站苏州企业网站建设公司价格
  • 沈阳微网站三好街 网站建设
  • 毕业答辩ppt模板免费下载网站网站域名使用怎么做分录
  • 建设购物网站要求网页制作与网站建设 pdf
  • 众创空间网站建设wordpress上传与安装包
  • 公司网站怎么做seo关键词排名优化销售
  • 企业网站建设如何去规划广西南宁网站建设哪家好
  • 类似头条的网站怎么做长丰县住房和城乡建设局网站
  • 密云青岛网站建设腾讯云cdn加速wordpress