模块一高质量开发25讲01丨优化上那些事儿_第1页
模块一高质量开发25讲01丨优化上那些事儿_第2页
模块一高质量开发25讲01丨优化上那些事儿_第3页
模块一高质量开发25讲01丨优化上那些事儿_第4页
模块一高质量开发25讲01丨优化上那些事儿_第5页
已阅读5页,还剩15页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

今天我们就来聊一聊有关“的那些事,我会从Android和你进一步讨论到底该怎样客观地衡量这个指标,以及又该如何看待和相关的稳定Android我们都知道,Android分为Java和Native简单来说,Java就是在Java代码中,出现了未捕获异常,导致程序异常退出。那Native又是怎么产生的呢?一般都是因为在Native代码中地址,也可能是abort,signal有比较大的关系。Java的捕获比较简单,但是很多同学对于如何捕获Native还是一知半解,下面我就重点介绍Native的捕获流程和难点。Native的捕获流如果你对Native机制的一些基本知识还不是很熟悉,建议你阅读一下《Android平台Native代码的捕获机制及实现》。这里我着重给你讲讲一个完整的Native从捕获C/C++服务端。客户端上报的日志文件,寻找适合的符,生成可读的C/C++调用Native捕获的难Chromium的Breakpad是目前Native捕获中最成方案 Breakpad过于复杂。其实我认为Native捕获这个事情本来就不容易,跟当初设计Tinker的时候一样,如果只想在90%的情况可靠,那大部分的代码的确可以砍掉;但如果想达到99%,在各种恶劣条件下依然可靠,后面付出的努力会远远高于前期。所以在上面的三个流程中,最的是怎么样保证客户端在各种情况下依然可以生成崩溃日志。因为在时,程序会处于一个不安全的状态,如果处理不当,非常容易发生次。应对方式:我们需要提前申请文件句柄fd见的signalstack。在一些特殊情况,我们可能还需要直换当前栈,所以这里也需要应对方式:这个时候我们无法安全地分配内存,也不敢使用stlbc内部实现会分配堆内存。这个时候如果继续分配内存,会导致出现堆破坏或者二次的情Brepadxsluppotbc。应对方式:Brepad会从原进程fork出子进程去收集现场,此外涉及与Jaa相关一般用子去操这样出现是这的信失,的父进程后面还可以继续获取其他的信息。在一些特殊的情况,我们还可能需要从子进程fork出孙进程。当然Breakpad也存在着一些问题,例如生成的minidump文件是二进制格式的,包含了太多不重要的信息,导致文件很容易达到几MB。但是minidump也不是毫无用处,它有一些比较高级的特性,比如使用gdb调试、可以看到传入参数等。Chromium未来计划使用Crashpad全面替代Breakpad,但目前来说还是“tooearlyto”。我们有时候想遵循Android的文本格式,并且添加我们认为重要的信息,这个时候就要去改造Breakpad的实现。比较常见的例如增加Logcat信息、Java调用栈信息以及崩如果想彻底弄清楚Native捕获,需要我们对虚拟机运行、汇编这些内功有一定造诣。做一个高可用的收集SDK真的不是那么容易,它需要经过多年的技术积累,要考虑的捕、的Firebase等等。当然,在平台的选择方面,我认为,从产品化跟社区来说,Bugly在国内做的最好;从技术深度跟捕获能力来说,阿里UC浏览器内核团队打造的啄木鸟平台最佳。看UV率。1UV率=发生的UV/登录只要用户出现过一次就会被计算到,所以UV率的高低会跟应用的使用时长有比较大的关系,这也是UV率在业界不算低的原因(强行甩锅)。当然这个时候,我们还可以去看应用PV率、启动率、重复率这些指标,计算方法都大同小这里为什么要单独统计启动率呢?因为启动对用户带来的最大,应用无法启动往往通过热修复也无法拯救。闪屏、运营活动,很多应用启动过程异常复杂,又涉及各种资源、配置下发,极其容易出现问题。有使用一种叫作“安全模式”的技术来保障客户端的启动流程,在到客户端启动失败后,给用户自救的机会。员B对所有线程、任务都封装了一层tryatch掉了所有Java于程序是否会出现其他异常表现,这是上帝要管的事情,反正我是实现了“千分之一”的目程序员C认为Native太难解决,所以他想了一个“好方法”,就是不所有BC例,而且他们的用户体量都还不算小。技术指标过于KPI化,是国内比较明显的一个现等价于应用的稳定性呢?答案是肯定不行。处理了,我们还会经常遇到ANR(ApplicationNotResponding,程序没有响应)出现ANR的时候,系统还会弹出框打断用户的操作,这是用户非常受的。这又带来另外一个问题,我们怎么去发现应用中的ANR使用eserver/dat/anr/tracs.txt的化的ROM,已经没有这个文件的权限了。这个时候你可能只能思考其他路径,海外可以使用y服务,而国内利HardcoderC框架是一套独立于安卓系统实现的通信框架,它让App商ROM能够实时了,目标就是充分调度系统资升App的运行度和画质,切实提高大家的使用体验)向厂商获取了更大的权消息队列的运行时间。这个方案无法准确地判断是否真正出现了ANR异常,也无法得到完整的ANR日志。在我看来,更应该放到卡顿的性能范畴。回想我当时在设计nr的时候,为了保证热修复不会影响应用的启动,r在补丁的,还有一些会导致应用异常退出主动。Process.killProcess()、exit()等。。出现了Java或Nativelowmemorykiller我们可以在应用启动的时候设定一个标志,在主动或后更新标志,这样下次启动时通过检测这个标志就能确认运行期间是否发生过异常退出。对应上面的五种退出场景,我们排除掉主动和(会单独的统计)这两种场景,希望可以到剩下三种的异常退出,理论上这个异常捕获机制是可以达到%覆盖的。通过这个异常退出的检测,可以反映如ANR、lowmemorykiller、系统强杀、死机、断1UV异常率=发生异常退出或的UV/登录存在一个巨大bug,会导致可能有用户卡死甚至重启,这是传统收集很难发现的ANR、OOM等异常情况有更大的关联。 我们可以做到5分钟级别的,确保能在第一时间发现线上重大问题,今天,我讲了Android的两种,重点介绍了Native的捕获流程和一些难点。做一个高可用的收集SDK并不容易,它背后涉及Linux信号处理以及内存分配、汇编等知接着,我们讨论了率应该如何去计算,率的高低跟应用时长、复杂度、收集K有关。不仅仅是率,我们还学习了目前ANR以及的问最后异常率这一个新的稳定性指标。作为技术人员,我们不应该盲目追求率这一个数字,应该以用户体验为先,如果强行去掩盖一些问题往往更加适得其反。我们不应该随意使用tryh去隐藏真正的问题,要从入手,了解的本质原因,保证后面的运行流程。在解决的过程,也要做到由点到面,不能只针对这个去解决,而应该要考虑这一类怎么解决和预防。的治理是一个长期的过程,在专栏下一期我会重点讲一些分析应用的方法论。另你如心的可以,在文章我放多的,的文也会以在留言区给我留言。 Breakpad的话,只需要直接编译即可。希望你可以通过一个简单的Native捕获过程,完成minidump文件的生成和解析,在实践中加深对Breakpad工作机制的认识。我要再次敲黑板划重点了,请你一定要坚持参与我们的课后练习,从最开始就养成学完后立欢迎你点击“请朋友读”,把今天的内容给好友,邀请他一起学习。最后别忘了在评论一起切磋进步哦。 售卖。页面已增加防盗追踪,将依 上一 导读|如何打造高质量的应用下一 02|优化(下):应用了,你应该如何去分析孙鹏飞置 9周大军置 PC操作系统:Ubuntu18.04X64年轻置 5defaultConfig里的ARM"libbreakpad-core.so"buildapkOwen置 东 15trycatch被,藏的很深,了异常。曾经因为这个问题,整个团队花了两天时间才一般crashsdk都提供虽然trycatch,但依然会上报到的方法答 11 作者回复:二两五花 、、 6gitclone代码,安装NDK和CMAKE,在此期间碰到一个问题,就是NDK版本太 这种大项目灰度测试一般是怎么做的?是开发了专门的sdk么,我所知的一般 克明 6只有 五花肉小 5我买了 master分支tgz包third_party/ssl/linux_syscall_support.h 4dyld:SymbolnotZTTNSt7cxx1118basic_stringstreamIcSt11char_traitsIcESaIcEEEReferencedfrom:/Users/Downloads/Chapter01-master/tools/mac/./minidump_stackwalk(whichwasbuiltforMacOSX 作者回复: 3 //Getinformationaboutthestack,giventhestackpointer.Wedon'ttry//walkthestacksincewemightnothavealltheinformationneededto 2青 windows平台,直接用Androidstudio导入工程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论