市场上已有的商业软件提供crash收集服务,这些软件基本都提供了日志存储,日志符号化解析和服务端可视化管理等服务:
Crashlytics ()
Crittercism ()
Bugsense ()
HockeyApp ()
Flurry()
开源的软件也能够拿来收集crash日志,比方Razor,QuincyKit(git链接)等,这些软件收集crash的原理事实上大同小异。都是依据系统产生的crash日志进行了一次提取或封装,然后将封装后的crash文件上传到相应的服务端进行解析处理。
非常多商业软件都采用了Plcrashreporter这个开源工具来上传和解析crash,比方HockeyApp,Flurry和crittercism等。
由于自己的crash信息太长,找了一张演示样例:
1)crash标识是应用进程产生crash时的一些标识信息。它描写叙述了该crash的唯一标识(E838FEFB-ECF6-498C-8B35-D40F0F9FEAE4),所发生的硬件设备类型(iphone3,1代表iphone4)。以及App进程相关的信息等。
2)基本信息描写叙述的是crash发生的时间和系统版本号。
3)异常类型描写叙述的是crash发生时抛出的异常类型和错误码;
4)线程回溯描写叙述了crash发生时全部线程的回溯信息,每个线程在每一帧相应的函数调用信息(这里由于空间限制没有全部列出);
5)二进制映像是指crash发生时已载入的二进制文件。以上就是一份crash日志包括的全部信息。接下来就须要依据这些信息去解析定位导致crash发生的代码逻辑, 这就须要用到符号化解析的过程(洋名叫:symbolication)。
解决线上闪退
首先保证。公布前充分测试。
公布后依旧有闪退现象,查看崩溃日志,及时修复并公布。
对于IOS设备用户来说,他们操作设备的方式主要有三种:触摸屏幕、晃动设备、通过遥控设施控制设备。相应的事件类型有以下三种:
1、触屏事件(Touch Event)
2、运动事件(Motion Event)
3、远端控制事件(Remote-Control Event)
响应者链(Responder Chain)
响应者对象(Responder Object),指的是有响应和处理事件能力的对象。响应者链就是由一系列的响应者对象构成的一个层次结构。
UIResponder是全部响应对象的基类,在UIResponder类中定义了处理上述各种事件的接口。
我们熟悉的UIApplication、 UIViewController、UIWindow和全部继承自UIView的UIKit类都直接或间接的继承自UIResponder。
响应者链有以下特点:
1、响应者链通常是由视图(UIView)构成的;
2、一个视图的下一个响应者是它视图控制器(UIViewController)(假设有的话),然后再转给它的父视图(Super View)。
3、视图控制器(假设有的话)的下一个响应者为其管理的视图的父视图;
4、单例的窗体(UIWindow)的内容视图将指向窗体本身作为它的下一个响应者
须要指出的是,Cocoa Touch应用不像Cocoa应用,它仅仅有一个UIWindow对象,因此整个响应者链要简单一点。
5、单例的应用(UIApplication)是一个响应者链的终点,它的下一个响应者指向nil,以结束整个循环。
点击屏幕时是怎样互动的
iOS系统检测到手指触摸(Touch)操作时会将其打包成一个UIEvent对象。并放入当前活动Application的事件队列,单例的UIApplication会从事件队列中取出触摸事件并传递给单例的UIWindow来处理,UIWindow对象首先会使用hitTest:withEvent:方法寻找此次Touch操作初始点所在的视图(View),即须要将触摸事件传递给其处理的视图。这个过程称之为hit-test view。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-76692-2.html