System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本申请涉及计算机,尤其涉及一种基于移动终端的操作系统的拦截anr的方法及设备。
技术介绍
1、在现有的anr(application not response,应用程序无响应对话框)机制中,在android系统中,对于事件的处理,都需要在一定的时间内完成,如果处理超时的话,就会触发anr,弹出不响应的界面,让用户选择等待或是立即结束应用。其中,anr机制的简单流程为,在事件发给应用处理前,会先发一个延时消息到系统的消息泵looper中,如果应用在规定的时间内执行完成,则会从looper中移除掉延时消息,如果没有在规定时间内执行完,就会在处理延时消息中,触发anr。根据触发anr的原因和超时时间分类,大致有如下四种anr:
2、第一种,input dispatching timeout是最常见的一种类型,主要是事件分发超时,事件在特定时间内(比如5s等)无法得到响应;
3、第二种,broadcast timeout:broadcast receiver的onreceive方法时10s没有处理完成,后台广播的超时时间为60s;
4、第三种,service timeout:service的各个生命周期函数在特定时间内(前台服务20s,后台服务200s)无法完成响应;
5、第四种,content provider:10s内content provider的publish未执行完。
6、以上四种情况触发后最终都会通知到anr助手helpe这个类的应用程序无响应appnotresp
7、开启服务service有两种方式,一个是开始服务startservice,一个是绑定服务bindservice,这里从开始服务startservice进行分析,service的启动流程如图1所示,ams(activitymanagerservice,活动管理服务)开启了service服务,传递到活动服务activeservices,activeservices是协助ams完成启动、绑定等逻辑操作,在活动服务activeservice的启动服务realstartservicelocked方法中创建了service对象,开启了一个service的创建对象oncreate()。service启动计时的逻辑是从创建对象activeservices.realstartservicelocked()开始的,通过在安排超时服务处理scheduleservicetimeoutlocked注册服务超时消息:service_timeout_msg类型的延时消息来实现超时检查,如果在规定的时间内处理完成,则会调用ams的服务执行完成servicedoneexecuting移除服务超时消息service_timeout_msg的消息延时;如果到了执行时间并且没有取消,则会调用anr助手anrhelpe中的appnotresponding弹出anr弹窗提示,然后采集信息,采集列表中包括各个线程的追踪traces信息,该方法较耗时,转存dump当前各个进程的cpu使用情况以及cpu总体负载情况,将追踪traces文件、cpu使用率等信息,保存到dropbox,即data/system/dropbox目录下,实现对开始服务后的相关处理。
8、在现有技术中,只要anr触发后,都会弹框提醒,并dump各个线程trace,这就使得在系统负载较高的情况下,会加重系统负荷,影响用户体验,并且anr弹窗也会阻塞用户操作,导致卡顿和操作中断等情况的发生。
技术实现思路
1、本申请的一个目的是提供一种基于移动终端的操作系统的拦截anr的方法及设备,会直接拦截并跳过所述anr弹窗,使得在移动终端的操作系统在系统负载较高的情况下,会主动拦截应用程序无响应对话框,从而避免了anr弹窗的出现,提升了用户体验度。
2、根据本申请的一个方面,提供了一种基于移动终端的操作系统的拦截anr的方法,该方法应用于移动终端,其中,该方法包括:
3、通过移动终端的操作系统中的应用程序无响应对话框anr助手的anr弹窗的入口,采集所述移动终端的当前cpu负载总量和系统等待io操作的时长;
4、判断所述当前cpu负载总量是否大于等于预设的cpu负载总量阈值、所述系统等待io操作的时长是否大于等于预设的系统等待io操作的时长阈值;
5、若所述当前cpu负载总量大于等于所述当前cpu负载总量阈值,和/或,所述系统等待io操作的时长大于等于所述系统等待io操作的时长阈值,则直接拦截并跳过所述anr弹窗;
6、否则,弹出所述anr弹窗,并转存anr堆栈信息。
7、进一步地,上述方法中,所述通过移动终端的操作系统中的应用程序无响应对话框anr助手的anr弹窗的入口,采集所述移动终端的当前cpu负载总量和系统等待io操作的时长,包括:
8、在移动终端的操作系统中的应用程序无响应对话框anr助手的anr弹窗中创建一个用于跟踪进程的cpu使用的进程cpu跟踪器实例;
9、调用所述进程cpu跟踪器实例中的用于打印当前cpu的使用状态的接口,获取所述移动终端的当前cpu的使用状态;
10、调用所述进程cpu跟踪器实例中的系统接口,对所述移动终端的当前cpu的使用状态进行统计,得到所述移动终端的当前cpu负载总量,同时,获取所述移动终端的系统等待io操作的时长。
11、进一步地,上述方法中,所述移动终端的当前cpu的使用状态包括所述移动终端的操作系统运行的各进程的cpu使用率。
12、进一步地,上述方法中,所述调用所述进程cpu跟踪器实例中的用于打印当前cpu的使用状态的接口,获取所述移动终端的当前cpu的使用状态之后,所述方法还包括:
13、按照进程负载降序排列的方式,对获取的所述移动终端的操作系统运行的各进程的cpu使用率进行降序排列。
14、进一步地,上述方法中,所述方法还包括:
15、预置所述cpu负载总量阈值和所述系统等待io操作的时长阈值。
16、根据本申请的另一个方面,还提供了一种非易失性存储介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行时,使所述处理器实现如上述基于移动终端的操作系统的拦截anr的方法。
17、根据本申请的另一个方面,还提供了一种基于移动终端的操作系统的拦截anr的设备,其中,该设备包括:
18、一个或多个处理器;
19、计算机可读介质,用于存储一或多个计算机可读指令,
20、当所述一个或多个计算机可读指令被所述一个或多个处理器执行,使得所述一个或多个处理器实现如上述基于移动终端的操作系统的拦截anr的方法。
21、与现有技术相比,本申请通过移动终端的操作系统中的应用程序无响应对话本文档来自技高网...
【技术保护点】
1.一种基于移动终端的操作系统的拦截ANR的方法,该方法应用于移动终端,其中,该方法包括:
2.根据权利要求1所述的方法,其中,所述通过移动终端的操作系统中的应用程序无响应对话框ANR助手的ANR弹窗的入口,采集所述移动终端的当前CPU负载总量和系统等待IO操作的时长,包括:
3.根据权利要求2所述的方法,其中,所述移动终端的当前CPU的使用状态包括所述移动终端的操作系统运行的各进程的CPU使用率。
4.根据权利要求3所述的方法,其中,所述调用所述进程CPU跟踪器实例中的用于打印当前CPU的使用状态的接口,获取所述移动终端的当前CPU的使用状态之后,所述方法还包括:
5.根据权利要求1至4中任一项所述的方法,其中,所述方法还包括:
6.一种非易失性存储介质,其上存储有计算机可读指令,所述计算机可读指令可被处理器执行时,使所述处理器实现如权利要求1至5中任一项所述的方法。
7.一种基于移动终端的操作系统的拦截ANR的设备,其中,该设备包括:
【技术特征摘要】
1.一种基于移动终端的操作系统的拦截anr的方法,该方法应用于移动终端,其中,该方法包括:
2.根据权利要求1所述的方法,其中,所述通过移动终端的操作系统中的应用程序无响应对话框anr助手的anr弹窗的入口,采集所述移动终端的当前cpu负载总量和系统等待io操作的时长,包括:
3.根据权利要求2所述的方法,其中,所述移动终端的当前cpu的使用状态包括所述移动终端的操作系统运行的各进程的cpu使用率。
4.根据权利要求3所述...
【专利技术属性】
技术研发人员:李龙龙,江南,
申请(专利权)人:上海卓易科技股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。