本申请实施例涉及智能终端,特别涉及一种线程泄露的检测方法、电子设备和计算机可读存储介质。
背景技术:
1、在应用开发中,以安卓(android)系统的应用开发为例,线程泄露通常指的是一个进程中的主线程被非主线程(例如:后台线程或子线程)所阻塞或占用,导致主线程无法及时响应用户的操作,从而影响应用的性能和用户体验。其中,主线程是指在应用对应的进程启动之后,创建的第一个线程,非主线程是指在第一个线程之后创建的线程。
2、线程泄露可能会导致应用卡顿或界面无响应等问题,严重影响应用的性能和用户体验。因此,在开发应用时,需要特别注意避免线程泄露的问题。
技术实现思路
1、本申请实施例提供了一种线程泄露的检测方法、电子设备和计算机可读存储介质,以实现在目标进程发生线程泄露之后,将记录线程信息的线程泄露日志和记录线程的调用栈的日志聚合为一个日志,提高线程泄露的检测能力。
2、第一方面,本申请实施例提供了一种线程泄露的检测方法,包括:确定目标进程发生线程泄露之后,生成第一线程泄露日志;其中,所述第一线程泄露日志中保存所述目标进程已开启的线程的信息;获取桥梁节点中存储的第二线程泄露日志;其中,所述第二线程泄露日志中记录所述目标进程中泄露线程的调用栈;所述泄露线程包括在第一数量达到预先设定的第一阈值之后,所述目标进程中新开启的线程,所述第一数量为所述目标进程中已开启线程的数量;将所述第一线程泄露日志和所述第二线程泄露日志,聚合为第三线程泄露日志。
3、上述线程泄露的检测方法中,电子设备确定目标进程发生线程泄露之后,生成第一线程泄露日志,然后获取桥梁节点中存储的第二线程泄露日志,将第一线程泄露日志和第二线程泄露日志,聚合为第三线程泄露日志,从而可以实现在目标进程发生线程泄露之后,将记录线程信息的第一线程泄露日志和记录泄露线程的调用栈的第二线程泄露日志聚合为一个日志,提高线程泄露的检测能力。
4、其中一种可能的实现方式中,所述获取桥梁节点中存储的第二线程泄露日志之前,还包括:获取目标进程中已开启线程的第一数量;在所述第一数量达到预先设定的第一阈值之后,获取所述目标进程中泄露线程的调用栈;根据所述泄露线程的调用栈,生成所述第二线程泄露日志;将所述第二线程泄露日志存储在桥梁节点中。
5、其中一种可能的实现方式中,所述根据所述泄露线程的调用栈,生成所述第二线程泄露日志包括:根据所述泄露线程的调用栈,获取每个调用栈的调用次数;根据所述调用次数,对所述调用栈进行排序,以生成所述第二线程泄露日志。
6、其中一种可能的实现方式中,所述获取桥梁节点中存储的第二线程泄露日志之后,还包括:删除所述桥梁节点中存储的第二线程泄露日志。
7、其中一种可能的实现方式中,所述确定目标进程发生线程泄露包括:获取目标进程已开启的线程的第一数量;如果所述第一数量大于或等于预先设定的第二阈值,则确定所述目标进程发生线程泄露;其中,所述第二阈值大于或等于所述第一阈值。
8、其中一种可能的实现方式中,所述生成第一线程泄露日志包括:获取所述目标进程已开启的线程的信息;根据所述线程的信息,生成第一线程泄露日志。
9、其中一种可能的实现方式中,所述根据所述线程的信息,生成第一线程泄露日志包括:对所述目标进程已开启的线程的信息进行排序,以生成第一线程泄露日志。
10、其中一种可能的实现方式中,所述线程的信息包括:所述线程的线程名;所述对所述目标进程已开启的线程的信息进行排序包括:根据所述线程的线程名,获取每个线程名对应的线程的第二数量;根据所述第二数量,对每个线程名对应的线程的信息进行排序。
11、其中一种可能的实现方式中,所述根据所述第二数量,对每个线程名对应的线程的信息进行排序之后,还包括:如果所述目标进程已开启的线程中存在至少两个线程名对应的线程的数量相同,则根据所述至少两个线程名,对所述至少两个线程名对应的线程的信息进行排序。
12、其中一种可能的实现方式中,所述线程的信息还包括:所述线程的运行时长;所述根据所述第二数量,对每个线程名对应的线程的信息进行排序之后,还包括:根据运行时长,对第一线程名对应的线程的信息进行排序;其中,所述第一线程名包括所述目标进程已开启线程的线程名中对应线程的数量大于1的线程名。
13、其中一种可能的实现方式中,所述线程的信息还包括:所述线程的创建时刻;所述根据运行时长,对第一线程名对应的线程的信息进行排序之后,还包括:如果所述第一线程名对应的线程的信息中存在至少两个线程的运行时长相同,则根据所述创建时刻,对所述至少两个线程的信息进行排序。
14、其中一种可能的实现方式中,所述将所述第一线程泄露日志和所述第二线程泄露日志,聚合为第三线程泄露日志之后,还包括:如果所述目标进程对应的应用注册了日志共享,则将所述第三线程泄露日志分享给所述应用。
15、其中一种可能的实现方式中,所述将所述第一线程泄露日志和所述第二线程泄露日志,聚合为第三线程泄露日志之后,还包括:根据所述第三线程泄露日志,定位所述目标进程中发生问题的线程。
16、第二方面,本申请实施例提供一种电子设备,包括:一个或多个处理器;存储器;多个应用程序;以及一个或多个计算机程序,其中上述一个或多个计算机程序被存储在上述存储器中,上述一个或多个计算机程序包括指令,当上述指令被上述电子设备执行时,使得上述电子设备执行第一方面提供的方法。
17、应当理解的是,本申请实施例的第二方面与本申请实施例的第一方面的技术方案一致,各方面及对应的可行实施方式所取得的有益效果相似,不再赘述。
18、第三方面,本申请实施例提供一种计算机可读存储介质,上述计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行第一方面提供的方法。
19、第四方面,本申请实施例提供一种计算机程序,当上述计算机程序被计算机执行时,用于执行第一方面提供的方法。
20、在一种可能的设计中,第四方面中的程序可以全部或者部分存储在与处理器封装在一起的存储介质上,也可以部分或者全部存储在不与处理器封装在一起的存储器上。
1.一种线程泄露的检测方法,其特征在于,包括:
2.根据权利要求1所述的方法,其特征在于,所述获取桥梁节点中存储的第二线程泄露日志之前,还包括:
3.根据权利要求2所述的方法,其特征在于,所述根据所述泄露线程的调用栈,生成所述第二线程泄露日志包括:
4.根据权利要求1-3任一项所述的方法,其特征在于,所述获取桥梁节点中存储的第二线程泄露日志之后,还包括:
5.根据权利要求1所述的方法,其特征在于,所述确定目标进程发生线程泄露包括:
6.根据权利要求1或5所述的方法,其特征在于,所述生成第一线程泄露日志包括:
7.根据权利要求6所述的方法,其特征在于,所述根据所述线程的信息,生成第一线程泄露日志包括:
8.根据权利要求7所述的方法,其特征在于,所述线程的信息包括:所述线程的线程名;
9.根据权利要求8所述的方法,其特征在于,所述根据所述第二数量,对每个线程名对应的线程的信息进行排序之后,还包括:
10.根据权利要求9所述的方法,其特征在于,所述线程的信息还包括:所述线程的运行时长;
11.根据权利要求10所述的方法,其特征在于,所述线程的信息还包括:所述线程的创建时刻;
12.根据权利要求1所述的方法,其特征在于,所述将所述第一线程泄露日志和所述第二线程泄露日志,聚合为第三线程泄露日志之后,还包括:
13.根据权利要求1所述的方法,其特征在于,所述将所述第一线程泄露日志和所述第二线程泄露日志,聚合为第三线程泄露日志之后,还包括:
14.一种电子设备,其特征在于,包括:一个或多个处理器;存储器;多个应用程序;以及一个或多个计算机程序,其中所述一个或多个计算机程序被存储在所述存储器中,所述一个或多个计算机程序包括指令,当所述指令被所述处理器执行时,使得所述电子设备执行如权利要求1-13任一项所述的方法。
15.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有计算机程序,当其在计算机上运行时,使得计算机执行如权利要求1-13任一项所述的方法。