工作原理
Android SDK工作原理
悟空SDK通过编译时的字节码技术或运行时的hook技术,在应用代码中植入性能监测代码,来实时采集性能数据,该过程并不影响用户代码逻辑。
每当App运行时,悟空SDK会在应用运行过程中,实时采集数据,并按照一定的时间间隔(默认为60秒)来上报数据,交由服务器数据处理端进行数据分析处理,在平台报表中展现。
应用切换到后台(30s)或退出时, 悟空SDK会停止数据采集和上报,以便减少不必要的流量消耗。
iOS SDK工作原理
利用objective-c的runtime特性,通过Method Swizzle技术,可以实现在运行时替换selector对应的方法实现,达到给方法挂钩的目的。即嵌入悟空SDK后,在应用程序启动之初,悟空SDK会对相应的方法执行Swizzle操作,从而在调用一个被Swizzle过后的函数时,将会首先调用SDK相应的自定义函数,在SDK的函数中会执行一些数据采集的操作,然后SDK的函数会再调回原函数的实现,不会影响原应用程序逻辑。
上报数据处理
网络数据:通过 Hook网络协议类库(OkHttp、NSURLSession等)实时抓取用户App中进行的网络访问请求(Http与Https标准协议),监控网络访问中发生的Http错误(40X或50X)和网络错误(请求超时、未知主机等),并且以一分钟一次的频率进行数据上传,在尽量减小资源消耗的情况下保证了数据的实时性和准确性。
崩溃数据采集:通过设置 handler来采集崩溃数据,当应用发生Crash以后,SDK会立马采集崩溃堆栈信息、用户交互轨迹、用户上下文信息和用户自定义附加信息,等待应用下次启动时上报服务器,通过报表可以查看到崩溃信息。如遇到数据上传失败(网络中断),崩溃数据则会做缓存处理,直到下次初始化后再上传服务器。
卡顿数据采集:通过监控系统消息事件来采集卡顿数据,当主线程不能正常的接受消息并处理时,则可以认为主线程此时处于卡顿状态。这时采集卡顿过程中的堆栈信息、用户交互轨迹、卡顿过程中的请求数据、用户上下文信息和用户自定义附加信息后立即上报服务器,两到三分钟后即可在报表查看到卡顿信息。如遇到数据上传失败(网络中断),卡顿数据则会做缓存处理,直到下次初始化后再上传服务器。
用户体验数据采集:通过监控原生应用系统接口来采集应用启动、页面加载及用户操作的数据,当用户在使用过程中发生「缓慢事件」(慢启动、慢可交互及慢操作)时,无需人工插码即可提供详细的代码调用瀑布图及用户上下文信息,快速协助研发人员定位性能问题,优化用户体验。