著录项信息
专利名称 | 一种应用Activity渲染时间获取方法和装置 |
申请号 | CN201510939602.8 | 申请日期 | 2015-12-15 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2016-05-11 | 公开/公告号 | CN105573755A |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F9/448 | IPC分类号 | G;0;6;F;9;/;4;4;8查看分类表>
|
申请人 | 北京奇虎科技有限公司;奇智软件(北京)有限公司 | 申请人地址 | 北京市西城区新街口外大街28号D座112室(德胜园区)
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司 | 当前权利人 | 北京奇虎科技有限公司,奇智软件(北京)有限公司 |
发明人 | 姜阳阳;袁任娜 |
代理机构 | 北京润泽恒知识产权代理有限公司 | 代理人 | 苏培华 |
摘要
本发明实施例提供了一种应用Activity渲染时间获取方法,涉及计算机技术领域。所述方法包括:在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。本发明解决了先技术使Activity渲染时间计算复杂,需要多次人工介入,尤其是对于不同Activity之间频繁切换的情况下,对渲染时间的计算可操作性比较差等问题,取得了可以更方便、快捷的、自动的计算Activity的渲染时间,可操作性强的有益效果。
1.一种应用Activity渲染时间获取方法,包括:
在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;
在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;
将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。
2.根据权利要求1所述的方法,其特征在于,在将所述第二时间点减去第一时间点,得到所述Activity的渲染时间的步骤之后,还包括:
将所述Activity的渲染时间进行展示。
3.根据权利要求2所述的方法,其特征在于,将所述Activity的渲染时间进行展示的步骤包括:
将所述Activity的渲染时间以广播的形式发送给第一进程;
所述第一进程接收到所述Activity渲染时间后,将所述Activity的渲染时间进行展示。
4.根据权利要求1所述的方法,其特征在于,在所述将所述第二时间点减去第一时间点,得到所述Activity的渲染时间的步骤之后,还包括:
将所述Activity的渲染时间与预定的时间阈值进行比较;
当所述渲染时间小于等于预定的时间阈值,则确定所述Activity的性能符合要求;
当所述渲染时间大于预定的时间阈值,则确定所述Activity的性能不符合要求。
5.根据权利要求4所述的方法,其特征在于,在确定所述Activity的性能不符合要求的步骤之后,还包括:
针对所述Activity生成报警信息。
6.根据权利要求1的所述的方法,其特征在于,在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点的步骤,包括:
监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果是,则通过第一钩子函数钩取所述OnCreate函数;
通过第一钩子函数获取系统时间的第一时间点。
7.根据权利要求6的所述的方法,其特征在于,所述在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点的步骤,包括:
监控所述目标应用针对所述Activity,是否调用OnWindowFocused函数,如果是,则通过第二钩子函数钩取所述OnWindowFocused函数;
通过第二钩子函数获取系统时间的第二时间点。
8.根据权利要求7所述的方法,其特征在于,在监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果是,则通过第一钩子函数钩取所述OnCreate函数的步骤之前,还包括:
将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。
9.根据权利要求8所述的方法,其特征在于,所述将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中的步骤包括:
在系统启动时,将系统自带的初始孵化进程替换为预定的第一孵化进程;
通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。
10.根据权利要求9所述的方法,其特征在于,所述通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中的步骤,包括:
通过所述第一孵化进程监控目标应用的应用进程是否开始启动;
如果应用进程开始启动,则将第一钩子函数和/或第二钩子函数注入所述应用进程,完成应用进程的启动。
11.一种应用Activity渲染时间获取装置,包括:
第一时间点获取模块,适于在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;
第二时间点获取模块,适于在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;
渲染时间获取模块,适于将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。
12.根据权利要求11所述的装置,其特征在于,在渲染时间获取模块之后,还包括:
展示模块,适于将所述Activity的渲染时间进行展示。
13.根据权利要求12所述的装置,其特征在于,所述展示模块包括:
渲染时间发送子模块,适于将所述Activity的渲染时间以广播的形式发送给第一进程;
渲染时间展示子模块,适于所述第一进程接收到所述Activity渲染时间后,将所述Activity的渲染时间进行展示。
14.根据权利要求11所述的装置,其特征在于,在所述渲染时间获取模块之后,还包括:
比较模块,适于将所述Activity的渲染时间与预定的时间阈值进行比较;当所述渲染时间小于等于预定的时间阈值,则进入第一确认模块;当所述渲染时间大于预定的时间阈值,则进入第二确认模块;
第一确认模块,适于确定所述Activity的性能符合要求;
第二确认模块,适于确定所述Activity的性能不符合要求。
15.根据权利要求14所述的装置,其特征在于,在第二确认模块之后,还包括:
报警信息生成模块,适于针对所述Activity生成报警信息。
16.根据权利要求11的所述的装置,其特征在于,所述第一时间点获取模块,包括:
第一监控子模块,适于监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果是,则进入第一钩取子模块;
第一钩取子模块,适于通过第一钩子函数钩取所述OnCreate函数;
第一时间点获取子模块,适于通过第一钩子函数获取系统时间的第一时间点。
17.根据权利要求16的所述的装置,其特征在于,所述第二时间点获取模块,包括:
第二监控子模块,适于监控所述目标应用针对所述Activity,是否调用
OnWindowFocused函数,如果是,则进入第二钩取子模块;
第二钩取子模块,适于通过第二钩子函数钩取所述OnWindowFocused函数;
第二时间点获取子模块,适于通过第二钩子函数获取系统时间的第二时间点。
18.根据权利要求17所述的装置,其特征在于,在第一时间点获取模块之前,还包括:
函数注入模块,适于将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。
19.根据权利要求18所述的装置,其特征在于,所述函数注入模块,包括:
孵化进程替换子模块,适于在系统启动时,将系统自带的初始孵化进程替换为预定的第一孵化进程;
函数注入子模块,适于通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。
20.根据权利要求19所述的装置,其特征在于,所述函数注入子模块,包括:
启动监控子模块,适于通过所述第一孵化进程监控目标应用的应用进程是否开始启动;如果应用进程开始启动,则进入钩子函数注入子模块;
钩子函数注入子模块,适于将第一钩子函数和/或第二钩子函数注入所述应用进程,完成应用进程的启动。
21.一种应用Activity渲染时间获取设备,包括:
存储器,加载有多条可执行指令;
处理器,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:
在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;
在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;
将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。
一种应用Activity渲染时间获取方法和装置\n技术领域\n[0001] 本发明涉及计算机技术领域,特别是涉及一种应用Activity渲染时间获取方法和一种应用Activity渲染时间获取装置。\n背景技术\n[0002] 随着智能手机的发展,出现了多种支持智能手机的系统。比如Android(安卓)系统。Android是一种以Linux为基础的开放源码操作系统,主要使用于手机等移动终端。\n[0003] 随着Android系统的市场占有率的增加,越来越多的开发者基于Android系统开发APP(application,应用),使用户使用Android手机更方便。对于开发者而言,为了保证所开发的APP的性能,会对各APP的性能进行测试,以便后期进一步的优化。例如,获取Android系统中各APP包含的每个Activity(Activity是Android的一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务)的渲染时间,从而可以对每个Activity的性能瓶颈有个时间上的量化。\n[0004] 在先技术中,是利用Android的命令行工具Logcat,输入命令获取系统各对象等的创建时间、结束时间等记录日志,然后从这些记录日志中找到目标的Activity的记录去计算渲染时间,但是这种方法的可操作性比较差,尤其是对于不同Activity之间频繁切换的情况,此方法的可操作性差等弊端会更明显。\n发明内容\n[0005] 鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的一种应用Activity渲染时间获取方法和相应的一种应用Activity渲染时间获取装置。\n[0006] 依据本发明的一个方面,提供了一种应用Activity渲染时间获取方法,包括:\n[0007] 在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;\n[0008] 在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;\n[0009] 将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0010] 优选地,在将所述第二时间点减去第一时间点,得到所述Activity的渲染时间的步骤之后,还包括:\n[0011] 将所述Activity的渲染时间进行展示。\n[0012] 优选地,将所述Activity的渲染时间进行展示的步骤包括:\n[0013] 将所述Activity的渲染时间以广播的形式发送给第一进程;\n[0014] 所述第一进程接收到所述Activity渲染时间后,将所述Activity的渲染时间进行展示。\n[0015] 优选地,在所述将所述第二时间点减去第一时间点,得到所述Activity的渲染时间的步骤之后,还包括:\n[0016] 将所述Activity的渲染时间与预定的时间阈值进行比较;\n[0017] 当所述渲染时间小于等于预定的时间阈值,则确定所述Activity的性能符合要求;\n[0018] 当所述渲染时间大于预定的时间阈值,则确定所述Activity的性能不符合要求。\n[0019] 优选地,在确定所述Activity的性能不符合要求的步骤之后,还包括:\n[0020] 针对所述Activity生成报警信息。\n[0021] 优选地,在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点的步骤,包括:\n[0022] 监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果是,则通过第一钩子函数钩取所述OnCreate函数;\n[0023] 通过第一钩子函数获取系统时间的第一时间点。\n[0024] 优选地,所述在所述Activity渲染成功时,通过钩取Activity渲染完成函数,通过第二钩子函数获取系统时间的第二时间点的步骤,包括:\n[0025] 监控所述目标应用针对所述Activity,是否调用OnWindowFocused函数,如果是,则通过第二钩子函数钩取所述OnWindowFocused函数;\n[0026] 通过第二钩子函数获取系统时间的第二时间点。\n[0027] 优选地,在监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果通过第一钩子函数钩取所述OnCreate函数的步骤之前,还包括:\n[0028] 将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0029] 优选地,所述将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中的步骤包括:\n[0030] 在系统启动时,将系统自带的初始孵化进程替换为预定的第一孵化进程;\n[0031] 通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0032] 优选地,所述通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中的步骤,包括:\n[0033] 通过所述第一孵化进程监控目标应用的应用进程是否开始启动;\n[0034] 如果应用进程开始启动,则将第一钩子函数和/或第二钩子函数注入所述应用进程,完成应用进程的启动。\n[0035] 依据本发明的另一个方面,提供了一种应用Activity渲染时间获取装置,包括:\n[0036] 第一时间点获取模块,适于在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;\n[0037] 第二时间点获取模块,适于在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;\n[0038] 渲染时间获取模块,适于将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0039] 优选地,在渲染时间获取模块之后,还包括:\n[0040] 展示模块,适于将所述Activity的渲染时间进行展示。\n[0041] 优选地,所述展示模块包括:\n[0042] 渲染时间发送子模块,适于将所述Activity的渲染时间以广播的形式发送给第一进程;\n[0043] 渲染时间展示子模块,适于所述第一进程接收到所述Activity渲染时间后,将所述Activity的渲染时间进行展示。\n[0044] 优选地,在所述渲染时间获取模块之后,还包括:\n[0045] 比较模块,适于将所述Activity的渲染时间与预定的时间阈值进行比较;当所述渲染时间小于等于预定的时间阈值,则进入第一确认模块;当所述渲染时间大于预定的时间阈值,则进入第二确认模块;\n[0046] 第一确认模块,适于确定所述Activity的性能符合要求;\n[0047] 第二确认模块,适于确定所述Activity的性能不符合要求。\n[0048] 优选地,在第二确认模块之后,还包括:\n[0049] 报警信息生成模块,适于针对所述Activity生成报警信息。\n[0050] 优选地,所述第一时间点获取模块,包括:\n[0051] 第一监控子模块,适于监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果是,则进入第一钩取子模块;\n[0052] 第一钩取子模块,适于通过第一钩子函数钩取所述OnCreate函数;\n[0053] 第一时间点获取子模块,适于通过第一钩子函数获取系统时间的第一时间点。\n[0054] 优选地,所述第二时间点获取模块,包括:\n[0055] 第二监控子模块,适于监控所述目标应用针对所述Activity,是否调用OnWindowFocused函数,如果是,则进入第二钩取子模块;\n[0056] 第二钩取子模块,适于通过第二钩子函数钩取所述OnWindowFocused函数;\n[0057] 第二时间点获取子模块,适于通过第二钩子函数获取系统时间的第二时间点。\n[0058] 优选地,在第一时间点获取模块之前,还包括:\n[0059] 函数注入模块,适于将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0060] 优选地,所述函数注入模块,包括:\n[0061] 孵化进程替换子模块,适于在系统启动时,将系统自带的初始孵化进程替换为预定的第一孵化进程;\n[0062] 函数注入子模块,适于通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0063] 优选地,所述函数注入子模块,包括:\n[0064] 启动监控子模块,适于通过所述第一孵化进程监控目标应用的应用进程是否开始启动;如果应用进程开始启动,则进入钩子函数注入子模块;\n[0065] 钩子函数注入子模块,适于将第一钩子函数和/或第二钩子函数注入所述应用进程,完成应用进程的启动。\n[0066] 依据本发明的另一个方面,提供了一种应用Activity渲染时间获取设备,包括:\n[0067] 存储器,加载有多条可执行指令;\n[0068] 处理器,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:\n[0069] 在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;\n[0070] 在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;\n[0071] 将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0072] 根据本发明的一种应用Activity渲染时间获取方法可以一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点,在各Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点,然后将第二时间点减去第一时间点,即可得到各Activity的渲染时间,由此解决了利用Android的命令行工具Logcat获取记录日志,再从记录日志中查找相应Activity记录从而计算其渲染时间,使Activity渲染时间计算复杂,需要多次人工介入,尤其是对于不同Activity之间频繁切换的情况下,对渲染时间的计算可操作性比较差等问题,取得了可以更方便、快捷的、自动的计算Activity的渲染时间,可操作性强的有益效果。\n[0073] 上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。\n附图说明\n[0074] 通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:\n[0075] 图1示出了根据本发明一个实施例的一种应用Activity渲染时间获取方法实施例的步骤流程图;\n[0076] 图2示出了根据本发明一个实施例的一种应用Activity渲染时间获取方法实施例的步骤流程图;\n[0077] 图3示出了根据本发明一个实施例的一种应用Activity渲染时间获取装置实施例的结构框图;\n[0078] 图4示出了根据本发明一个实施例的一种应用Activity渲染时间获取装置实施例的结构框图;\n[0079] 图5示出了根据本发明一个实施例的一种应用Activity渲染时间获取设备实施例的结构框图。\n具体实施方式\n[0080] 下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。\n[0081] 实施例一\n[0082] 参照图1,示出了根据本发明一个实施例的一种应用Activity渲染时间获取方法实施例的步骤流程图,具体可以包括如下步骤:\n[0083] 步骤110,在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点。\n[0084] 上述目标应用包括可以在Android系统中运行的应用,如360安全卫士、360安全浏览器等。\n[0085] Activity是Android组件中最基本也是最为常见用的四大组件之一,Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。在一个Android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。在实际应用中,一个应用中至少包含一个Activity。\n[0086] 在实际应用中,如果要启动一个Activity,那么需要先调用系统的Activity启动函数,即OnCreate函数,然后执行后续操作。OnCreate函数是一个消息响应函数,是响应WM_CREATE消息的一个函数,而WM_CREATE消息是由Create函数调用的。OnCreate函数主要做这个Activity启动时一些必要的初始化工作,这个函数调用完后,这个Activity并不是说就已经启动了,或者是跳到前台了。而是还需要其他的大量工作,我们知道:onCreate之后还有onRestart函数和onStart函数等。实际上onStart函数调用完毕了这个Activity还没有完全启动,也只是前台可见,直到onResume函数调用后这个OnCreate才算完全启动。但是系统的OnCreate函数并不会自动记录启动时系统的时间。\n[0087] 在本发明实施例中,可以在系统向Activity组件发送一消息要创建一个Activity时,那么在Activity调用OnCreate函数时,钩取该OnCreate函数,以获取当前的系统时间作为本发明实施例的第一时间点。\n[0088] 在实际应用中,钩取OnCreate函数,是将OnCreate函数的地址重定向到钩子函数,然后根据调用者传入的参数执行自己的逻辑,如记录该函数被调用时的系统的第一时间点,然后将该第一时间点记录到指定存储空间,然后执行OnCreate函数原来的逻辑。\n[0089] 在本发明实施例中,可以通过将Android系统初始的孵化器进程替换为特定的第一孵化器进程,然后通过第一孵化器进程实现钩取系统的Activity启动函数,并获取当前的系统时间作为第一时间点。\n[0090] 步骤120,在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点。\n[0091] 在实际应用中,一个Activity如果要展现给用户,在该Activity需要调用Activity渲染完成函数,才意味着Activity可以展现给用户。该渲染完成函数如OnWindowFocused函数。\n[0092] 在实际应用中,钩取OnWindowFocused函数,是将OnWindowFocused函数的地址重定向到钩子函数,然后根据调用者传入的参数执行自己的逻辑,如记录系统调用该函数时的第二时间点等逻辑,然后可执行OnWindowFocused函数原来的逻辑。\n[0093] 在传统的Activity渲染过程中,若Activity在调用OnCreate函数之后,进行一系列的函数调用,然后调用OnWindowFocused函数,则表明Activity渲染完成。但是同样不会自动记录此时系统的时间。\n[0094] 在本发明实施例中,会在系统调用OnWindowFocused函数时,钩取该OnWindowFocused函数,执行自己的逻辑以获取当前的系统时间作为本发明实施例的第二时间点。\n[0095] 另外,在本发明实施例中,可以判断当前Activity调用OnWindowFocused函数时,是否为对该Activity首次调用OnWindowFocused函数。若是,则获取当前的系统时间作为本发明实施例的第二时间点;若不是,则不获取当前的系统时间。\n[0096] 在实际应用中,一个Activity渲染完成后,即产生焦点界面后,用户可能切换到其他焦点界面,该Activity可能不在栈顶,新产生的Activity在栈顶。那么当用户切换回前一个界面时,系统需要重新渲染该Activity使其用户可见,那么还会调用OnWindowFocused函数。那么对于一个Activity来说,其可能调用了多次OnWindowFocused函数,则此时可能会获取多个第二时间点,可能导致渲染时间的计算不准确。为了避免上述情况,所以在本发明实施例中,优选地,可以判断当前Activity调用OnWindowFocused函数时,是否为在调用OnCreate函数之后首次调用OnWindowFocused函数。\n[0097] 在本发明实施例中,同样可以如在步骤110中将Android系统初始的孵化器进程替换为特定的第一孵化器进程,然后通过第一孵化器进程实现钩取系统的Activity渲染完成函数,获取当前的系统时间作为第二时间点。\n[0098] 步骤130,将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0099] 在本发明实施例中,Activity的渲染时间是指一个Activity从开始启动到初次渲染成功所用的时间。其中,渲染成功是指Activity的页面完全显示且其中的控件全部可点击。\n[0100] 如上述步骤所述,在实际应用中,若Android系统调用OnCreate函数,表明Activity开始启动,若Android系统调用OnWindowFocused函数,则表明Activity渲染完成。\n[0101] 所以,在本发明实施例中,将调用OnCreate函数时记录的第二时间周期,减去调用OnCreate函数时记录的第一时间周期,可以得到Activity的渲染时间。\n[0102] 在本发明实施例中,可以将该渲染时间以及Activity标识发送给指定的第一进程,然后指定进程可以对该渲染时间以及Activity标识进行记录等操作。\n[0103] 在实际应用中,可在钩取OnWindowFocused函数后,在相应的钩取函数的逻辑中先记录第二时间点,然后从指定位置获取第一时间点,将所述第二时间点减去第一时间点,得到所述Activity的渲染时间,将所述渲染时间返回给指定的第一进程,然后继续执行OnWindowFocused函数的原有逻辑。\n[0104] 在本发明实施例中,分别在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点,在各Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点,然后将第二时间点减去第一时间点,即可得到各Activity的渲染时间,从而可以更方便、快捷、自动的计算Activity的渲染时间,使获取各Activity渲染时间的可操作性更强。\n[0105] 实施例二\n[0106] 参照图2,示出了根据本发明一个实施例的一种应用Activity渲染时间获取方法实施例的步骤流程图,具体可以包括如下步骤:\n[0107] 步骤210,将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0108] 在本发明实施例中,第一钩子函数用于钩取Activity启动函数,并执行记录Activity启动函数被调用时的系统时间的过程,并将该系统时间作为第一时间点记录到指定位置,同时执行Activity启动函数正常的创建逻辑。\n[0109] 第二钩子函数用于钩取Activity渲染完成函数,并执行记录Activity渲染完成函数被调用时的系统时间,并将该系统时间作为第二时间点,并从指定位置提取第一时间点,将所述第二时间点减去第一时间点,得到所述Activity的渲染时间的过程,同时执行Activity启动函数正常的创建逻辑。\n[0110] 本发明实施例需要先将第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0111] 优选的,所述步骤210,具体包括:\n[0112] 子步骤211,在系统启动时,将系统自带的初始孵化进程替换为预定的第一孵化进程。\n[0113] 在实际应用中,Android系统的正常启动过程大致为:启动系统—>init进程读取启动init.rc—>init进程创建zygote(孵化器)进程—>zygote进程创建java虚拟机载入zygoteInit类—>通过所述虚拟机注册需要监听的socket—>等待\nActivityManagerService向socket写入创建进程的创建消息—>zygote进程根据所述创建消息创建对应进程。\n[0114] 在本发明实施例中,为了实现对各目标应用的Activity启动过程的监控,需要首先对Android系统初始的孵化器进程即zygote进程进行替换,替换为指定的第一孵化器进程,即第一zygote进程,该第一zygote进程可以监听目标应用的应用进程是否需要创建,即监听前述socket是否有创建消息,如果有则创建该应用进程,在创建过程中将本发明实施例的各钩取函数注入该应用进程。\n[0115] 在实际应用中将钩取函数对应的SO库注入该应用进程,该SO库包括了第一钩子函数和第二钩子函数的逻辑代码,从而可以监听该应用进程在创建某个Activity时是否调用OnCreate函数,以及是否调用OnWindowFocused函数。\n[0116] 在Android系统中,所有的应用程序进程以及系统服务进程System Server都是由zygote进程孕育(fork)出来的,因此,本发明可通过Android系统初始的zygote进程替换为第一zygote进程实现监听和注入过程。\n[0117] 当然,在替换Android系统初始的zygote进程为第一zygote进程后,需要重启Android系统。替换后的第一zygote进程的功能除了包括初始的zygote进程的功能之外,还添加了监控各Activity是否开始启动以及各Activity是否完成渲染。\n[0118] 在实际应用中,可以利用Xposed框架实现将Android系统初始的孵化器进程替换为指定的第一孵化器进程。其中,Xposed框架是一款可以在不修改APK(AndroidPackage,安卓安装包)的情况下影响程序运行的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。所以,在本发明实施例中,利用Xposed框架,将Android系统初始的孵化器进程替换为指定的第一孵化器进程,但是不会影响Android系统原始的其他任何功能。当然,也可采用其他方式将系统本身的孵化器进程替换为本发明实施例的第一孵化器进程。\n[0119] 当然,本发明实施例中,可以选择某个或者某几个目标应用为目标应用,也可以不指定,将该移动终端中安装的目标应用都作为目标应用。\n[0120] 当然,实际应用中,步骤210在整个系统中可以只执行一次。\n[0121] 子步骤212,通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入的应用进程中。\n[0122] 基于前述第一zygote进程的逻辑,可以通过第一zygote进程将所述第一钩子函数和第二钩子函数注入的应用进程中。\n[0123] 优选的,步骤212,包括:\n[0124] 步骤2121,通过所述第一孵化进程监控目标应用的应用进程是否开始启动;如果应用进程开始启动,则进入步骤2122。\n[0125] 在实际应用中,在各目标应用包含的Activity开始启动之前,首先需要启动目标应用的应用进程,进而可以利用应用进程调用OnCreate函数以启动各Activity函数。那么本发明实施例则通过所述第一孵化进程监控目标应用的应用进程是否开始启动。\n[0126] 步骤2122,将第一钩子函数和/或第二钩子函数注入所述应用进程,完成应用进程的启动。\n[0127] 钩子(Hook)函数的本质是一段用以处理系统消息的程序,可以通过系统调用,把它挂入系统。在本发明实施例中,可以在应用进程启动时,由第一zygote进程,将第一钩子函数和/或第二钩子函数注入各应用进程中,然后完成应用进程的启动。\n[0128] 当然,实际目标应用中,向目标应用的应用进程同时注入第一钩子函数和第二钩子函数的代码。\n[0129] 步骤220,在一目标应用的各个Activity启动时,通过第一钩子函数钩取系统的Activity启动函数,获取系统时间的第一时间点。\n[0130] 优选的,步骤220,具体包括:\n[0131] 子步骤221,监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果是,则进入子步骤222。\n[0132] 在实际目标应用中,各目标应用在其每个Activity启动时,都会调用OnCreate函数,所以在本发明实施例中,监控各目标应用在启动Activity时,是否调用OnCreate函数。\n如果调用OnCreate函数,则进入步骤子222。\n[0133] 子步骤222,通过第一钩子函数钩取所述OnCreate函数。\n[0134] 在本发明实施例中,可以将第一钩子函数注入在调用OnCreate函数的接口处,若监控到目标应用针对一个Activity,调用OnCreate函数,则将原来的OnCreate函数的地址重定向到第一钩子函数,从而钩取该OnCreate函数。\n[0135] 子步骤223,通过第一钩子函数获取系统时间的第一时间点。\n[0136] 在本发明实施例中,第一钩子函数则会获取此时的系统时间并记录,作为相应Activity开始启动的时间点,在本发明实施例中称为第一时间点。同时,第一钩子函数会执行钩取的OnCreate函数的启动逻辑,使Activity开始启动。\n[0137] 即在本发明实施例中的第一钩子函数的功能包括钩取的OnCreate函数的全部功能以外,同时还可以获取当前的系统时间作为第一时间点。\n[0138] 步骤230,在所述Activity渲染完成时,通过第二钩子函数钩取系统Activity渲染完成函数,获取系统时间的第二时间点。\n[0139] 优选的,步骤230,具体包括:\n[0140] 子步骤231,监控所述目标应用针对所述Activity,是否调用OnWindowFocused函数,如果是,则进入步骤子232。\n[0141] 在实际目标应用中,各目标应用在其每个Activity渲染完成时,都会调用OnWindowFocused函数,所以在本发明实施例中,监控某目标应用在针对其中的某个Activity调用OnCreate函数后,是否调用OnWindowFocused函数。\n[0142] 在实际应用中,在监控到目标应用针对该Activity调用OnWindowFocused函数时,可以进一步判断是否为在调用OnCreate函数之后,首次调用OnWindowFocused函数,若是则进入步骤子232。\n[0143] 子步骤232,通过第二钩子函数钩取所述OnWindowFocused函数。\n[0144] 在本发明实施例中,可以将第二钩子函数注入在调用OnWindowFocused函数的接口处,若监控到目标应用针对一个Activity,调用OnWindowFocused函数,将原来的用OnWindowFocused函数的地址重定向到第二钩子函数,从而钩取该用OnWindowFocused函数。\n[0145] 在本发明实施例中,第二钩子函数的功能包括其钩取的OnWindowFocused函数的全部功能之外,还可以同时获取当前系统时间作为第二时间点。\n[0146] 子步骤233,通过第二钩子函数获取系统时间的第二时间点。\n[0147] 在本发明实施例中,第二钩子函数拦截OnWindowFocused函数,同时可以实现与OnWindowFocused函数相同的功能使Activity渲染完成,而且第二钩子函数将会获取此时的系统时间并记录,作为相应Activity渲染完成的时间点,在本发明实施例中称为第二时间点。\n[0148] 步骤240,将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0149] 在本发明实施例中,可以在第二钩子函数中添加获取第一钩子函数获取的第一时间点,然后将所述第二时间点减去第一时间点,得到所述Activity的渲染时间的逻辑,从而可以执行步骤240。\n[0150] 步骤250,将所述Activity的渲染时间进行展示。\n[0151] 在本发明实施例中,可以将该Activity的渲染时间发送给第一进程,由第一进程将该Activity的渲染时间渲染到界面中进行展示。当然,还可以将其记录到数据库中。\n[0152] 优选的,步骤250,具体包括:\n[0153] 子步骤251,将所述Activity的渲染时间以广播的形式发送给第一进程。\n[0154] 在本发明实施例中,渲染时间是由应用进程获取的,那么如果要对渲染时间进行统计,则需要另外的进程。那么本发明实施例中可以利用广播的形式将Activity发送给第一进程,第一进程则接收Activity的渲染时间以及将Activity的渲染时间进行展示。\n[0155] 在本发明实施例中,可以由第二钩子函数在计算得到渲染时间后,将该渲染时间以广播的形式发发送,第一进程则接收该广播,从中提取Activity的渲染时间进行处理。\n[0156] 在实际应用中,以广播的形式发送Activity渲染时间的过程是以ActivityManagerService为中心。广播的发送者将广播发送到ActivityManagerService,ActivityManagerService接收到这个广播以后,就会在自己的注册中心查看有哪些进程订阅了该广播,然后把这个广播发送到这些进程中。概括来说,广播的发送路径就是从发送者到ActivityManagerService,再从ActivityManagerService到接收者,这中间的两个过程都是通过Binder进程间通信机制来完成的。\n[0157] 在本发明实施例中,可以预先在ActivityManagerService的注册中心中设定第一进程订阅Activity渲染时间对应的广播。\n[0158] 另外,第一进程可以在本步骤之前,或者本步骤之前的任一步骤之前创建,对此,本发明实施例不加以限定。\n[0159] 子步骤252,所述第一进程接收到所述Activity渲染时间后,将所述Activity的渲染时间进行展示。\n[0160] 第一进程在接收到Activity渲染时间后,可以在对应的Android系统的特定界面上展示该Activity渲染时间。\n[0161] 在本发明实施例中,可以在接收到某一APP所包含的全部Activity渲染时间之后,再将各Activity渲染时间在特定界面上展示。当然,也可以按照其他方式展示Activity的渲染时间,对此,本发明实施例不加以限定。\n[0162] 优选的,在步骤250之后,还包括:\n[0163] 步骤260,判断所述Activity的渲染时间是否小于等于预定的时间阈值;若所述渲染时间小于等于预定的时间阈值,则进入步骤270;若所述渲染时间大于预定的时间阈值,则进入步骤280。\n[0164] 在实际应用中,获取各Activity的渲染时间的目的包括判断各Activity的性能是否符合要求。具体地,可以针对各Activity,预定时间阈值,通过比较各Activity的渲染时间与对应的时间阈值之间的关系,从而确定各Activity的性能是否符合要求。若Activity的渲染时间小于等于预定的时间阈值,则表明该Activity的渲染速度较快,可以确定该Activity的性能符合要求;若Activity的渲染时间大于预定的时间阈值,则表明该Activity的渲染时间较长,可以确定该Activity的性能不符合要求。\n[0165] 当然,对于不同的Activity,其时间阈值可以是不相同的,也可以是相同的,对此,本发明不加以限定。\n[0166] 而且,各Activity对应的时间阈值可以在本步骤之前,或者本步骤之前的任一步骤之前预定,对此,本发明实施例不加以限定。\n[0167] 另外,可以将预定的时间阈值放置于配置文件中,在执行Activity的渲染时间与预定的时间阈值进行比较的步骤之前,可以利用数据接口,从配置文件中提取该Activity对应的时间阈值。当然,具体的时间阈值存放与调用可以有很多种方式,对此,本发明实施例不加以限定。\n[0168] 步骤270,确定所述Activity的性能符合要求。\n[0169] 步骤280,确定所述Activity的性能不符合要求。\n[0170] 步骤290,针对所述Activity生成报警信息。\n[0171] 在本发明实施例中,针对性能不符合要求的各Activity,会生成报警信息,在Android系统的某一界面中显示,以提示用户或测试人员。\n[0172] 例如,对于360安全卫士,其中的电脑清理Activity,预设的渲染时间的时间阈值为1s。\n[0173] 若经步骤240得到的该Activity的渲染时间为2s,则表明该Activity的渲染时间过长,可以确定该Activity的性能不符合要求,那么针对该Activity,可以生成报警信息,如:\n[0174] 360安全卫士的电脑清理Activity的性能不符合要求!\n[0175] 当然,对于报警信息的生成方式以及报警信息的具体格式可以有多种,本发明实施例不加以限定。\n[0176] 需要说明的是,在实际应用中,步骤260-290也可以在步骤250之前执行,或者是与步骤250同时执行,对此,本发明不加以限定。\n[0177] 在本发明实施例中,同样分别在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点,在各Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点,然后将第二时间点减去第一时间点,可以更方便、快捷的、自动的计算Activity的渲染时间,使获取各Activity渲染时间的可操作性性更强。\n[0178] 进一步地,本发明实施例可以利用特定的第一孵化进程替换Android系统中原始的孵化进程,从而实现了将第一钩子函数和/或第二钩子函数注入Android系统的各目标应用中。利用第一钩子函数监控各目标应用针对一个Activity,是否调用OnCreate函数,若是则钩取OnCreate函数,获取系统时间的第一时间点;利用第二钩子函数监控该Activity是否调用OnWindowFocused函数,若是则钩取OnWindowFocused函数,获取系统时间的第二时间点,从而可以更精确地计算得出Activity的渲染时间,进一步地提高了获取各Activity染时间的方便性、快捷性、自动性和可操作性。\n[0179] 另外,在本发明实施例中,还会展示Activity的渲染时间,并且将Activity的渲染时间与预定的时间阈值相比较,从而判断Activity的性能是否符合要求,并且对于性能不符合要求的Activity生成报警信息。从而将Activity的渲染时间更直观地展现,使获取的各Activity渲染时间的可读性更强。\n[0180] 对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。\n[0181] 实施例三\n[0182] 参照图3,示出了根据本发明一个实施例的一种应用Activity渲染时间获取装置实施例的结构框图,具体可以包括如下模块:\n[0183] 第一时间点获取模块310,适于在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点。\n[0184] 第二时间点获取模块320,适于在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点。\n[0185] 渲染时间获取模块330,适于将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0186] 在本发明实施例中,分别在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点,在各Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点,然后将第二时间点减去第一时间点,即可得到各Activity的渲染时间,从而可以更方便、快捷、自动的计算Activity的渲染时间,使获取各Activity渲染时间的可操作性更强。\n[0187] 实施例四\n[0188] 参照图4,示出了根据本发明一个实施例的一种应用Activity渲染时间获取装置实施例的结构框图,具体可以包括如下模块:\n[0189] 函数注入模块410,适于将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。具体包括:\n[0190] 孵化进程替换子模块411,适于在系统启动时,将系统自带的初始孵化进程替换为预定的第一孵化进程。\n[0191] 函数注入子模块412,适于通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0192] 优选地,函数注入子模块412,包括:\n[0193] 启动监控子模块,适于通过所述第一孵化进程监控目标应用的应用进程是否开始启动;如果应用进程开始启动,则进入钩子函数注入子模块。\n[0194] 钩子函数注入子模块,适于将第一钩子函数和/或第二钩子函数注入所述应用进程,完成应用进程的启动。\n[0195] 第一时间点获取模块420,适于在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点。具体包括:\n[0196] 第一监控子模块421,适于监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果是,则进入第一钩取子模块。\n[0197] 第一钩取子模块422,适于通过第一钩子函数钩取所述OnCreate函数。\n[0198] 第一时间点获取子模块423,适于通过第一钩子函数获取系统时间的第一时间点。\n[0199] 第二时间点获取模块430,适于在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点。具体包括:\n[0200] 第二监控子模块431,适于监控所述目标应用针对所述Activity,是否调用OnWindowFocused函数,如果是,则进入第二钩取子模块。\n[0201] 第二钩取子模块432,适于通过第二钩子函数钩取所述OnWindowFocused函数。\n[0202] 第二时间点获取子模块433,适于通过第二钩子函数获取系统时间的第二时间点。\n[0203] 渲染时间获取模块440,适于将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0204] 展示模块450,适于将所述Activity的渲染时间进行展示。具体包括:\n[0205] 渲染时间发送子模块451,适于将所述Activity的渲染时间以广播的形式发送给第一进程。\n[0206] 渲染时间展示子模块452,适于所述第一进程接收到所述Activity渲染时间后,将所述Activity的渲染时间进行展示。\n[0207] 优选地,在本发明实施例中,在展示模块450之后,还包括:\n[0208] 比较模块460,适于将所述Activity的渲染时间与预定的时间阈值进行比较;当所述渲染时间小于等于预定的时间阈值,则进入第一确认模块;当所述渲染时间大于预定的时间阈值,则进入第二确认模块。\n[0209] 第一确认模块470,适于确定所述Activity的性能符合要求。\n[0210] 第二确认模块480,适于确定所述Activity的性能不符合要求。\n[0211] 报警信息生成模块490,适于针对所述Activity生成报警信息。\n[0212] 在本发明实施例中,同样分别在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点,在各Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点,然后将第二时间点减去第一时间点,可以更方便、快捷的、自动的计算Activity的渲染时间,使获取各Activity渲染时间的可操作性性更强。\n[0213] 进一步地,本发明实施例可以利用特定的第一孵化进程替换Android系统中原始的孵化进程,从而实现了将第一钩子函数和/或第二钩子函数注入Android系统的各目标应用中。利用第一钩子函数监控各目标应用针对一个Activity,是否调用OnCreate函数,若是则钩取OnCreate函数,获取系统时间的第一时间点;利用第二钩子函数监控该Activity是否调用OnWindowFocused函数,若是则钩取OnWindowFocused函数,获取系统时间的第二时间点,从而可以更精确地计算得出Activity的渲染时间,进一步地提高了获取各Activity染时间的方便性、快捷性、自动性和可操作性。\n[0214] 另外,在本发明实施例中,还会展示Activity的渲染时间,并且将Activity的渲染时间与预定的时间阈值相比较,从而判断Activity的性能是否符合要求,并且对于性能不符合要求的Activity生成报警信息。从而将Activity的渲染时间更直观地展现,使获取的各Activity渲染时间的可读性更强。\n[0215] 对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。\n[0216] 实施例五\n[0217] 参照图5,示出了根据本发明一个实施例的一种应用Activity渲染时间获取设备实施例的结构框图,所述设备500具体可以包括:\n[0218] 存储器510,加载有多条可执行指令;\n[0219] 处理器520,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:\n[0220] 在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;\n[0221] 在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;\n[0222] 将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0223] 需要说明的是,所述多条可执行指令可以包括执行上述任意步骤的方法。\n[0224] 在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。\n各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。\n[0225] 在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。\n[0226] 类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。\n[0227] 本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。\n[0228] 此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。\n[0229] 本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的应用Activity渲染时间获取设备中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。\n[0230] 应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。\n[0231] 本发明公开了A1、一种应用Activity渲染时间获取方法,包括:\n[0232] 在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;\n[0233] 在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;\n[0234] 将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0235] A2、如A1所述的方法,在将所述第二时间点减去第一时间点,得到所述Activity的渲染时间的步骤之后,还包括:\n[0236] 将所述Activity的渲染时间进行展示。\n[0237] A3、如A2所述的方法,将所述Activity的渲染时间进行展示的步骤包括:\n[0238] 将所述Activity的渲染时间以广播的形式发送给第一进程;\n[0239] 所述第一进程接收到所述Activity渲染时间后,将所述Activity的渲染时间进行展示。\n[0240] A4、如A1所述的方法,在所述将所述第二时间点减去第一时间点,得到所述Activity的渲染时间的步骤之后,还包括:\n[0241] 将所述Activity的渲染时间与预定的时间阈值进行比较;\n[0242] 当所述渲染时间小于等于预定的时间阈值,则确定所述Activity的性能符合要求;\n[0243] 当所述渲染时间大于预定的时间阈值,则确定所述Activity的性能不符合要求。\n[0244] A5、如A4所述的方法,在确定所述Activity的性能不符合要求的步骤之后,还包括:\n[0245] 针对所述Activity生成报警信息。\n[0246] A6、如A1的所述的方法,在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点的步骤,包括:\n[0247] 监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果是,则通过第一钩子函数钩取所述OnCreate函数;\n[0248] 通过第一钩子函数获取系统时间的第一时间点。\n[0249] A7、如A1的所述的方法,所述在所述Activity渲染成功时,通过钩取Activity渲染完成函数,通过第二钩子函数获取系统时间的第二时间点的步骤,包括:\n[0250] 监控所述目标应用针对所述Activity,是否调用OnWindowFocused函数,如果是,则通过第二钩子函数钩取所述OnWindowFocused函数;\n[0251] 通过第二钩子函数获取系统时间的第二时间点。\n[0252] A8、如A6或A7所述的方法,在监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果通过第一钩子函数钩取所述OnCreate函数的步骤之前,还包括:\n[0253] 将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0254] A9、如A8所述的方法,所述将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中的步骤包括:\n[0255] 在系统启动时,将系统自带的初始孵化进程替换为预定的第一孵化进程;\n[0256] 通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0257] A10、如A9所述的方法,所述通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中的步骤,包括:\n[0258] 通过所述第一孵化进程监控目标应用的应用进程是否开始启动;\n[0259] 如果应用进程开始启动,则将第一钩子函数和/或第二钩子函数注入所述应用进程,完成应用进程的启动。\n[0260] 本发明还公开了B11、一种应用Activity渲染时间获取装置,包括:\n[0261] 第一时间点获取模块,适于在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;\n[0262] 第二时间点获取模块,适于在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;\n[0263] 渲染时间获取模块,适于将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。\n[0264] B12、如B11所述的装置,在渲染时间获取模块之后,还包括:\n[0265] 展示模块,适于将所述Activity的渲染时间进行展示。\n[0266] B13、如B12所述的装置,所述展示模块包括:\n[0267] 渲染时间发送子模块,适于将所述Activity的渲染时间以广播的形式发送给第一进程;\n[0268] 渲染时间展示子模块,适于所述第一进程接收到所述Activity渲染时间后,将所述Activity的渲染时间进行展示。\n[0269] B14、如B11所述的装置,在所述渲染时间获取模块之后,还包括:\n[0270] 比较模块,适于将所述Activity的渲染时间与预定的时间阈值进行比较;当所述渲染时间小于等于预定的时间阈值,则进入第一确认模块;当所述渲染时间大于预定的时间阈值,则进入第二确认模块;\n[0271] 第一确认模块,适于确定所述Activity的性能符合要求;\n[0272] 第二确认模块,适于确定所述Activity的性能不符合要求。\n[0273] B15、如B14所述的装置,在第二确认模块之后,还包括:\n[0274] 报警信息生成模块,适于针对所述Activity生成报警信息。\n[0275] B16、如B11的所述的装置,所述第一时间点获取模块,包括:\n[0276] 第一监控子模块,适于监控所述目标应用针对一个Activity,是否调用OnCreate函数,如果是,则进入第一钩取子模块;\n[0277] 第一钩取子模块,适于通过第一钩子函数钩取所述OnCreate函数;\n[0278] 第一时间点获取子模块,适于通过第一钩子函数获取系统时间的第一时间点。\n[0279] B17、如B11的所述的装置,所述第二时间点获取模块,包括:\n[0280] 第二监控子模块,适于监控所述目标应用针对所述Activity,是否调用OnWindowFocused函数,如果是,则进入第二钩取子模块;\n[0281] 第二钩取子模块,适于通过第二钩子函数钩取所述OnWindowFocused函数;\n[0282] 第二时间点获取子模块,适于通过第二钩子函数获取系统时间的第二时间点。\n[0283] B18、如B16或B17所述的装置,在第一时间点获取模块之前,还包括:\n[0284] 函数注入模块,适于将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0285] B19、如B18所述的装置,所述函数注入模块,包括:\n[0286] 孵化进程替换子模块,适于在系统启动时,将系统自带的初始孵化进程替换为预定的第一孵化进程;\n[0287] 函数注入子模块,适于通过所述第一孵化进程将所述第一钩子函数和第二钩子函数注入目标应用的应用进程中。\n[0288] B20、如B19所述的装置,所述函数注入子模块,包括:\n[0289] 启动监控子模块,适于通过所述第一孵化进程监控目标应用的应用进程是否开始启动;如果应用进程开始启动,则进入钩子函数注入子模块;\n[0290] 钩子函数注入子模块,适于将第一钩子函数和/或第二钩子函数注入所述应用进程,完成应用进程的启动。\n[0291] 本发明还公开了C21、一种应用Activity渲染时间获取设备,包括:\n[0292] 存储器,加载有多条可执行指令;\n[0293] 处理器,执行所述多条可执行指令;所述多条可执行指令包括执行以下步骤的方法:\n[0294] 在一目标应用的各个Activity启动时,通过钩取系统的Activity启动函数,获取系统时间的第一时间点;\n[0295] 在所述Activity渲染完成时,通过钩取系统Activity渲染完成函数,获取系统时间的第二时间点;\n[0296] 将所述第二时间点减去第一时间点,得到所述Activity的渲染时间。
法律信息
- 2022-08-12
专利权的转移
登记生效日: 2022.08.02
专利权人由北京奇虎科技有限公司变更为北京奇虎科技有限公司
地址由100088 北京市西城区新街口外大街28号D座112室(德胜园区)变更为100015 北京市朝阳区酒仙桥路6号院2号楼1至19层104号内8层801
专利权人由奇智软件(北京)有限公司 变更为空
- 2019-03-08
- 2016-06-08
实质审查的生效
IPC(主分类): G06F 9/44
专利申请号: 201510939602.8
申请日: 2015.12.15
- 2016-05-11
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2011-03-30
|
2009-08-31
| | |
2
| |
2011-10-19
|
2011-05-20
| | |
3
| |
2013-05-22
|
2013-02-25
| | |
4
| |
2014-09-24
|
2014-06-05
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |