[发明专利]监测主线程的阻塞的方法和装置在审
申请号: | 201710811083.6 | 申请日: | 2017-09-11 |
公开(公告)号: | CN107590015A | 公开(公告)日: | 2018-01-16 |
发明(设计)人: | 吴迪;程剑锋;朱孝瑾;王孝满;袁连松 | 申请(专利权)人: | 北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司 |
主分类号: | G06F11/07 | 分类号: | G06F11/07;G06F11/36 |
代理公司: | 中原信达知识产权代理有限责任公司11219 | 代理人: | 张一军,姜劲 |
地址: | 100195 北京市海淀区杏石口路6*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 监测 主线 阻塞 方法 装置 | ||
技术领域
本发明涉及计算机技术领域,尤其涉及一种监测主线程的阻塞的方法和装置。
背景技术
在运行iOS系统的设备上,如果应用程序的运行过程中主线程发生阻塞,那么就会导致iOS设备失去响应,出现不会有任何画面更新以及触摸、转屏或者按键等事件响应的“应用卡顿”现象。应用发生这种情况会对用户的使用体验造成非常恶劣的影响,甚至可能导致用户不再使用该应用。虽然主线程阻塞会导致如此严重的后果,但是任何测试和代码检查都无法保障应用是绝对不存在问题的,因此,建立完善的监测机制就非常重要了。
在没有任何额外的监测机制的情况下,如果出现应用卡顿,用户有可能会关掉发生卡顿的应用,iOS系统会认为这是一次用户正常操作行为,不需要记录,这就导致不会产生任何关于此次卡顿的信息上报。用户也有可能耐着性子等待卡顿结束,而我们也依然无法获取到任何关于本次阻塞的信息。
目前,在iOS系统中,watchdog插件能够对主线程阻塞进行一定程度监测。但是,在实现本发明过程中,发明人发现watchdog插件只能够监测到当应用在启动或者后台返回前台等事件触发的几个关键函数上发生的阻塞,无法监测应用程序整个生命周期内的主线阻塞情况,并且当监测到阻塞发生后,watchdog插件会主动终止应用,而不考虑应用程序后续是否可以恢复正常,这就影响了用户的体验。
因此,亟需一种能够监测应用程序整个生命周期内的主线阻塞情况,且不影响用户体验的监测主线程的阻塞的方法和装置。
发明内容
有鉴于此,本发明实施例提供一种监测主线程的阻塞的方法和装置,能够监测整个应用程序使用期间的主线阻塞情况,且不影响用户体验。
为实现上述目的,根据本发明实施例的一个方面,提供了一种监测主线程的阻塞的方法,该方法包括:
执行下述监测过程:
在被监测的所述主线程的执行队列中加入变量更改函数,所述变量更改函数用于更改预设的阻塞判断变量的值;
在预定的时间间隔后,检查所述阻塞判断变量的值是否被更改,当所述阻塞判断变量的值未被更改,则确定所述主线程发生阻塞。
进一步的,所述监测过程重复执行。
进一步的,所述更改所述阻塞判断变量的值是指将所述阻塞判断变量的值由阻塞状态值更改为非阻塞状态值,
所述检查预设的阻塞判断变量的值是否被更改的步骤包括:
检查所述阻塞判断变量的值是否为阻塞状态值,其中,所述阻塞判断变量的初始值被设置为非阻塞状态值,
当所述阻塞判断变量的值为阻塞状态值则确定所述主线程发生阻塞,并且
当所述阻塞判断变量的值为非阻塞状态值则将其更改为阻塞状态值。
进一步的,本发明实施例提供的监测主线程的阻塞的方法,还包括:
在每次执行所述监测过程中,检查预设的循环结束变量的值是否被设置为结束状态值,当所述循环结束变量的值为结束状态值时,则结束所述监测过程的执行。
进一步的,当所述阻塞判断变量的值未被更改,除了确定所述主线程发生阻塞,还执行下述调用栈获取过程:
创建地址数组;
获取所述主线程的环境变量,把所述环境变量中记录的该主线程的指令地址记录到所述地址数组中,
其中,获取的所述环境变量中记录当前的节点变量,所述当前的节点变量包括:当前主线程正在执行的函数的调用地址以及指向链表中上一个节点变量的指针,
以所述当前的节点变量为起点,根据所述指针遍历链表,依次把该链表中每个节点变量的函数的调用地址记录到所述地址数组中,从而获得当前主线程正在执行的函数的调用栈。
进一步的,在所述调用栈获取过程中还包括:
在获得当前主线程正在执行的函数的调用栈之后,判断是否需要对所述地址数组进行符号化,当不需要时,则依据所述地址数组生成阻塞报告,当需要时,对所述地址数组进行符号化,并依据经符号化后的所述地址数组生成阻塞报告;
保存所述阻塞报告。
可选的,所述预定的时间间隔的区间为{Y,min(20,X)},其中,Y为主线程上最耗时函数的执行时长的秒数,X为用户对应用卡顿的容忍时长的秒数,min(20,X)为在20与X中的较小值。
为实现上述目的,根据本发明实施例的另一个方面,提供了一种监测主线程的阻塞的装置,包括:阻塞监测模块,用于执行下述监测过程:
在被监测的所述主线程的执行队列中加入变量更改函数,所述变量更改函数用于更改预设的阻塞判断变量的值;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司,未经北京京东尚科信息技术有限公司;北京京东世纪贸易有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201710811083.6/2.html,转载请声明来源钻瓜专利网。