一种信息获取方法、装置及智能终端与流程

文档序号:12665392阅读:170来源:国知局
一种信息获取方法、装置及智能终端与流程

本发明实施例涉及信息技术领域,尤其涉及一种信息获取方法、装置及智能终端。



背景技术:

随着智能手机以及平板电脑等智能终端的快速发展及普及,智能终端上的应用软件日益丰富,满足了终端用户多样化的使用需求。同时,应用软件的增多以及系统的不断升级,对智能终端的内存容量及性能等也提出了更高的要求。

内存泄露是智能终端运行过程中容易发生的一种异常情况,一般指分配了内存给某个进程使用,而该进程使用完内存后没有及时释放内存,导致已分配的内存无法回收再利用,随着进程的运行,系统可分配内存就会越来越少,运行效率下降,最终可能导致系统由于没有足够的内存而瘫痪,造成严重影响。造成内存泄露的原因可能有很多,监测及定位难度较大。



技术实现要素:

本发明实施例提供一种信息获取方法、装置及智能终端,可以及时获取智能终端中内存泄露情况的相关信息。

第一方面,本发明实施例提供了一种信息获取方法,包括:

监听智能终端的内存使用情况;

根据所述内存使用情况判断是否发生内存泄露事件;

在发生内存泄露事件时,获取目标对象的内存使用信息,其中,所述目标对象包括应用程序和操作系统底层。

第二方面,本发明实施例提供了一种信息获取装置,包括:

内存监听模块,用于监听智能终端的内存使用情况;

内存泄露判断模块,用于根据所述内存使用情况判断是否发生内存泄露事件;

内存信息获取模块,用于在发生内存泄露事件时,获取目标对象的内存使用信息,其中,所述目标对象包括应用程序和操作系统底层。

第三方面,本发明实施例提供了一种智能终端,其特征在于,包括存储器,处理器及存储在存储器上并可在处理器运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现以下步骤:

监听智能终端的内存使用情况;

根据所述内存使用情况判断是否发生内存泄露事件;

在发生内存泄露事件时,获取目标对象的内存使用信息,其中,所述目标对象包括应用程序和操作系统底层。

本发明实施例中提供的信息获取方案,监听智能终端的内存使用情况,根据内存使用情况判断是否发生内存泄露事件,在发生内存泄露事件时,获取目标对象的内存使用信息,其中,目标对象包括应用程序和操作系统底层。通过采用上述技术方案,在发生内存泄露事件时,能够及时获取应用程序和操作系统底层的内存使用信息。

附图说明

图1为本发明实施例提供的一种信息获取方法的流程示意图;

图2为本发明实施例提供的另一种信息获取方法的流程示意图;

图3为本发明实施例提供的一种信息获取装置的结构框图;

图4为本发明实施例提供的一种智能终端的结构示意图。

具体实施方式

下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各步骤描述成顺序的处理,但是其中的许多步骤可以被并行地、并发地或者同时实施。此外,各步骤的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。

图1为本发明实施例提供的一种信息获取方法的流程示意图,该方法可以由信息获取装置执行,其中该装置可由软件和/或硬件实现,一般可集成在智能终端中。如图1所示,该方法包括:

步骤101、监听智能终端的内存使用情况。

示例性的,本实施例中的智能终端可以为智能手机、智能手表、平板电脑、游戏机、个人数字助理和数字多媒体播放器等智能设备。

示例性的,内存使用情况可包括已被占用的内存容量值、剩余可用内存容量值、已被占用的内存容量值占总内存的比例、剩余可用内存容量值占总内存的比例、指定应用程序或进程占用内存容量值以及内存被占用的时间等信息。

优选的,本步骤可包括:获取智能终端的内存回收处理结果。智能终端中装载的操作系统有很多种,例如安卓Android操作系统、苹果IOS操作系统以及手机窗口(Windows Phone,WP)操作系统等等,不同的操作系统中一般存在自己的内存回收机制,可利用内存回收机制对已被使用的内存进行回收,保证系统的高效运行。本发明实施例可通过实时获取或定时获取等方式来获取智能终端的内存回收处理结果,达到监听智能终端的内存使用情况的目的。

步骤102、根据所述内存使用情况判断是否发生内存泄露事件。

判断是否发生内存泄露事件的方式可以有很多种,本发明实施例不作限定。例如,可获取应用程序申请的内存块被占用的时间,当占用时间超过该应用程序对应的设定值时,确定发生内存泄露事件;又如,采集预设时段内被测进程对应的内存占用值,判断内存占用值的变化趋势是否符合设定趋势(如递增趋势),若符合,则确定发生内存泄露事件。

可选的,本发明实施例中,可根据所述内存回收处理结果判断是否发生内存泄露事件。示例性的,当内存回收机制确定没有内存可以回收了或者需要回收高优先级进程的内存时(假设低优先级进程的内存优先被回收),智能终端处于低内存场景,一般会出现卡顿或应用程序闪退等现象,此时可确定发生内存泄漏。内存回收处理结果可包括被杀死的进程的身份标识(如名称)、类型、所对应的应用程序、所对应的回收等级等,还可包括被杀死的进程的数量等。

优选的,根据所述内存回收处理结果判断是否发生内存泄露事件可包括如下实现方式:

当预设事件的发生次数达到预设次数阈值时,确定发生内存泄露事件,其中,所述预设事件包括回收等级高于或等于预设等级阈值的进程所占用的内存被回收,回收等级低的进程所占用的内存优先被回收。回收等级较高的进程所占用的内存被回收的事件发生多次后,可认为发生内存泄漏事件。因为内存回收机制会优先回收那些回收等级较低的进程所对应的内存(即优先杀死回收等级较低的进程),当没有较低回收等级的进程所对应的内存能够被回收时,才会回收较高回收等级的进程所对应的内存。当回收一次较高回收等级的进程所对应的内存后,可用内存依然很低,则会再次回收其他较高回收等级的进程所对应的内存,当回收次数达到预设次数阈值时,可认为发生内存泄漏事件。预设次数阈值可根据实际需求设定,本发明实施例不做限定,例如,可以是3次。

可选的,当所述预设事件为回收等级等于最高回收等级的进程被回收时,所述预设次数阈值为1,其中,所述最高回收等级的进程包括前台应用程序对应的进程。前台应用程序是用户正在使用的应用程序,若其对应的进程所占用的内存被回收,则会造成前台应用程序的闪退,严重影响用户的使用,因此内存回收机制一般不会回收其占用的内存,所以前台应用程序对应的进程的回收等级一般为最高,但当其占用的内存被强制回收一次时,说明已基本无其他内存可以回收,可认为发生内存泄漏事件。

本发明实施例中在判定是否发生内存泄露事件时,可对最高回收等级以及其他较高回收等级的进程进行区分对待,能够提升判定的准确度。例如,最高回收等级(假设为5级)对应的预设次数阈值为1,其他较高回收等级(假设大于或等于3级且小于5级)对应的预设次数阈值大于1(如3)。

步骤103、在发生内存泄露事件时,获取目标对象的内存使用信息。

其中,所述目标对象包括应用程序和操作系统底层。

可选的,目标对象可以是应用程序对应的进程,这里的应用程序可包括智能终端装载的所有系统应用程序和所有第三方应用程序;操作系统底层可包括驱动、内存缓存机制模块以及内存分配策略模块等所有需要占用内存的或者所有存在内存泄露可能性的底层子系统。

示例性的,内存使用信息可包括所占用的内存容量值。

优选的,在发生内存泄露事件时,可向系统层上报内存泄露事件,使系统层从操作系统底层读取目标对象的内存使用信息。在智能终端的运行过程中,操作系统底层一般会实时记录各个进程以及系统底层对内存的使用信息,在检测到发生内存泄漏事件时,可由系统层从操作系统底层中读取当前时刻各目标对象的内存使用信息,从而实现内存泄露情况相关信息的获取。

本发明实施例中提供的信息获取方法,监听智能终端的内存使用情况,根据内存使用情况判断是否发生内存泄露事件,在发生内存泄露事件时,获取目标对象的内存使用信息,其中,目标对象包括应用程序和操作系统底层。通过采用上述技术方案,在发生内存泄露事件时,能够及时获取应用程序和操作系统底层的内存使用信息,可使智能终端的所有内存使用情况一览无余,便于准确地定位及分析内存泄漏原因。

可选的,在获取目标对象的内存使用信息之后,还可包括:将所获取的内存使用信息保存至所述智能终端本地或发送至指定终端。这样做的好处在于,可及时保存所获取的内存使用信息,有利于对内存泄漏原因进行定位及分析。示例性的,所述指定终端可以是指定智能终端或者指定服务器,一般可由智能终端在出厂前设置好,或由用户自行选定。优选的,可在检测到用户的发送指令时,将所获取的内存使用信息发送至指定终端。

优选的,所述指定终端为指定服务器。此处优化的好处在于,在检测到智能终端发生内存泄露事件时,能够及时获取应用程序及操作系统底层对内存的详细使用信息,并上传到指定服务器中,开发人员能够及时通过该指定服务器发现哪些智能终端中出现了内存泄露情况,并根据所上传的内存使用信息快速定位及分析内存泄露的原因,在找到原因后,可及时采取相应的解决办法(如对出现问题的应用程序代码进行修复或发布补丁等等),使内存泄露问题的解决效率得到提升,同时也有利于开发人员收集造成内存泄露的多种原因,在后续的应用程序开发过程中及时克服相关问题。

优选的,可对所获取的内存使用信息进行统计分析,并将分析结果保存至所述智能终端本地或发送至指定终端。这样设置的好处在于,所获取的内存使用信息可能是零散的,难以找到其分布规律,对其进行统计分析可增强内存使用信息的条理及可读性,便于开发人员快速进行内存泄漏原因的定位及分析。

示例性的,所述对所获取的内存信息进行统计分析可包括:依照所使用内存容量的大小对各目标对象对应的内存使用信息进行排序。例如,可将所使用内存容量较大的目标对象对应的内存使用信息排在前面。

图2为本发明实施例提供的另一种信息获取方法的流程示意图,该方法适用于智能终端的操作系统为Android操作系统的场景,如图2所示,该方法包括如下步骤:

步骤201、通过设置在操作系统底层的第一接口获取智能终端的内存回收模块中的内存回收处理结果。

其中,所述内存回收模块为用于实现Android的低内存管理Low Memory Killer机制的模块;所述操作系统底层为Kernel层。

Android系统是一个多任务系统,可以同时运行多个进程,进程的生命周期都由系统控制,即使用户在前台关掉了应用程序,但其进程依然存在于内存中,目的是为了下次能快速启动。如此,随着系统运行时间的加长,内存会越来越少,Kernel层需要定时执行检查,结束(杀死)一些进程来回收(释放)内存。Android系统中的内存回收机制为Low Memory Killer机制,可通过Android系统中的内存回收模块来实现。Low Memory Killer机制是基于Linux操作系统的内存不足(Out Of Memory,OMM)规则改进而来的,通过进程的参数oom_adj的参数值来确定将要杀死的进程,oom_adj的参数值大小一般与进程类型和进程被调度次数等有关。oom_adj的参数值越小,对应的进程越重要,在本发明实施例中的回收等级越高,反之亦然。本发明实施例中可对oom_adj的参数值进行区间划分,不同区间对应不同的回收等级。当系统的剩余内存较少时,Low Memory Killer机制就会选择回收等级较低的进程来杀死,从而回收其占用的内存。

示例性的,可在Kernel层设置从内存回收模块获取数据的第一接口,从而通过该第一接口来获取内存回收模块中的内存回收处理结果。

步骤202、根据内存回收处理结果判断是否发生内存泄漏事件,若是,则执行步骤203;否则,返回执行步骤201。

示例性的,当前台应用程序对应的进程(回收等级最高)所占用的内存因Low Memory Killer机制被内存回收模块回收时,确定发生内存泄露事件;或者,当预设事件的发生次数达到预设次数阈值(大于1)时,确定发生内存泄露事件,其中,所述预设事件为回收等级高于预设等级阈值且低于最高回收等级的进程所占用的内存因Low Memory Killer机制被内存回收模块回收。其中,回收等级低的进程所占用的内存优先被回收。

步骤203、向系统层上报内存泄露事件,以使所述系统层从所述操作系统底层读取目标对象的内存使用信息。

本发明实施例中,目标对象可以是应用程序对应的进程,这里的应用程序可包括智能终端装载的所有系统应用程序和所有第三方应用程序;操作系统底层可包括驱动、Ion以及Slab等底层子系统。其中,驱动可指Kernel层对应的驱动,会占用一部分内存,因此也存在内存泄漏的可能性;Ion为内存缓存机制,有些消费者使用内存后没有释放,会导致内存泄漏;Slab为Kernel层的内存分配策略,同样存在内存泄漏的可能性。通过读取上述目标对象的内存使用信息,可更加全面的获取智能终端中的内存被占用的情况,便于更加准确地定位及分析内存泄漏原因。

可选的,系统层可通过读取Kernel层中的proc模块中的数据来实现内存使用信息的获取。proc模块即Linux内核提供的/proc文件系统,它以文件系统的方式为访问系统内核数据的操作提供接口。系统当中当前运行的每一个进程都有对应的一个目录在/proc下,一般以进程的PID号为目录名,它们是读取进程信息的接口,而进程信息中包含进程的内存使用信息;此外,Kernel层中的驱动、Ion以及Slab等底层子系统所占用的内存情况也会被记录在/proc下。本发明实施例中,可将获取到的内存使用信息作为快照存储于智能终端中,如以txt的格式存储于/data/system/dropbox目录下。

步骤204、对所获取的内存使用信息进行统计分析,并将分析结果保存至所述智能终端本地或发送至指定服务器。

示例性的,可对获取的内存使用信息进行进一步的统计分析,由于从proc模块直接读取的数据可能是零散的,可以依照所使用内存容量的大小对各目标对象对应的内存使用信息进行排序。例如,假设有N个应用程序,一个应用程序对应的进程所占用的内存容量为Rn,其中,n为1-N中的任意整数,驱动所占用的内存容量为Rq,Ion所占用的内存容量为Ri,Slab所占用的内存容量为Rs,将Rq、Ri、Rs以及N个Rn按照取值从大到小的顺序进行排序,得到分析结果。将分析结果保存至智能终端本地或者发送至指定服务器,开发人员即可到相应的位置快速找到分析结果,并根据分析结果对内存泄漏原因进行定位及分析。

此外,在进行排序之前,若同一个应用程序对应多个进程,可将该应用程序对应的所有进程的内存使用信息进行汇总,并将所有进程所占用的内存容量值的总和作为该应用程序所使用的内存容量。

本发明实施例提供的信息获取方法,适用于装载Android操作系统的智能终端,当智能终端中发生内存泄露时,可及时获取并保存应用程序以及操作系统底层对内存的使用信息,有利于对内存泄漏原因进行定位及分析。

图3为本发明实施例提供的一种信息获取装置的结构框图,该装置可由软件和/或硬件实现,一般集成在智能终端中,可通过执行信息获取方法来获取信息。如图3所示,该装置包括:

内存监听模块301,用于监听智能终端的内存使用情况;

内存泄露判断模块302,用于根据所述内存使用情况判断是否发生内存泄露事件;

内存信息获取模块303,用于在发生内存泄露事件时,获取目标对象的内存使用信息,其中,所述目标对象包括应用程序和操作系统底层。

本发明实施例提供的信息获取装置,在发生内存泄露事件时,能够及时获取应用程序和操作系统底层的内存使用信息,使智能终端的所有内存使用情况一览无余,便于准确地定位及分析内存泄漏原因。

可选的,所述内存监听模块用于:获取智能终端的内存回收处理结果;

所述内存泄露判断模块用于:根据所述内存回收处理结果判断是否发生内存泄露事件。

可选的,所述根据所述内存回收处理结果判断是否发生内存泄露事件,包括:

当预设事件的发生次数达到预设次数阈值时,确定发生内存泄露事件,其中,所述预设事件包括回收等级高于或等于预设等级阈值的进程所占用的内存被回收,回收等级低的进程所占用的内存优先被回收。

可选的,当所述预设事件为回收等级等于最高回收等级的进程被回收时,所述预设次数阈值为1,其中,所述最高回收等级的进程包括前台应用程序对应的进程。

可选的,所述智能终端的操作系统为安卓Android操作系统;

所述内存监听模块用于:

通过设置在所述操作系统底层的第一接口获取智能终端的内存回收模块中的内存回收处理结果,其中,所述内存回收模块为用于实现Android的低内存管理Low Memory Killer机制的模块。

可选的,所述内存信息获取模块用于:

在发生内存泄露事件时,向系统层上报内存泄露事件,以使所述系统层从所述操作系统底层读取目标对象的内存使用信息。

可选的,该装置还包括:

统计分析模块,用于在获取目标对象的内存使用信息之后,对所获取的内存使用信息进行统计分析,并将分析结果保存至所述智能终端本地或发送至指定终端。

可选的,所述对所获取的内存信息进行统计分析包括:

依照所使用内存容量的大小对各目标对象对应的内存使用信息进行排序。

本发明实施例提供了一种智能终端,该智能终端中可集成本发明实施例提供的智能终端的信息获取装置。图4为本发明实施例提供的一种智能终端的结构示意图。如图4所示,该智能终端可以包括:壳体(图中未示出)、存储器401、中央处理器(Central Processing Unit,CPU)402(又称处理器,以下简称CPU)、电路板(图中未示出)和电源电路(图中未示出)。所述电路板安置在所述壳体围成的空间内部;所述CPU402和所述存储器401设置在所述电路板上;所述电源电路,用于为所述智能终端的各个电路或器件供电;所述存储器401,用于存储可执行程序代码;所述CPU402通过读取所述存储器401中存储的可执行程序代码来运行与所述可执行程序代码对应的计算机程序,以实现以下步骤:

监听智能终端的内存使用情况;

根据所述内存使用情况判断是否发生内存泄露事件;

在发生内存泄露事件时,获取目标对象的内存使用信息,其中,所述目标对象包括应用程序和操作系统底层。

所述智能终端还包括:外设接口403、RF(Radio Frequency,射频)电路405、音频电路406、扬声器411、电源管理芯片408、输入/输出(I/O)子系统409、触摸屏412、其他输入/控制设备410以及外部端口404,这些部件通过一个或多个通信总线或信号线407来通信。

应该理解的是,图示智能终端400仅仅是智能终端的一个范例,并且智能终端400可以具有比图中所示出的更多的或者更少的部件,可以组合两个或更多的部件,或者可以具有不同的部件配置。图中所示出的各种部件可以在包括一个或多个信号处理和/或专用集成电路在内的硬件、软件、或硬件和软件的组合中实现。

下面就本实施例提供的用于信息获取的智能终端进行详细的描述,该智能终端以手机为例。

存储器401,所述存储器401可以被CPU402、外设接口403等访问,所述存储器401可以包括高速随机存取存储器,还可以包括非易失性存储器,例如一个或多个磁盘存储器件、闪存器件、或其他易失性固态存储器件。

外设接口403,所述外设接口403可以将设备的输入和输出外设连接到CPU402和存储器401。

I/O子系统409,所述I/O子系统409可以将设备上的输入输出外设,例如触摸屏412和其他输入/控制设备410,连接到外设接口403。I/O子系统409可以包括显示控制器4091和用于控制其他输入/控制设备410的一个或多个输入控制器4092。其中,一个或多个输入控制器4092从其他输入/控制设备410接收电信号或者向其他输入/控制设备410发送电信号,其他输入/控制设备410可以包括物理按钮(按压按钮、摇臂按钮等)、拨号盘、滑动开关、操纵杆、点击滚轮。值得说明的是,输入控制器4092可以与以下任一个连接:键盘、红外端口、USB接口以及诸如鼠标的指示设备。

触摸屏412,所述触摸屏412是用户智能终端与用户之间的输入接口和输出接口,将可视输出显示给用户,可视输出可以包括图形、文本、图标、视频等。

I/O子系统409中的显示控制器4091从触摸屏412接收电信号或者向触摸屏412发送电信号。触摸屏412检测触摸屏上的接触,显示控制器4091将检测到的接触转换为与显示在触摸屏412上的用户界面对象的交互,即实现人机交互,显示在触摸屏412上的用户界面对象可以是运行游戏的图标、联网到相应网络的图标等。值得说明的是,设备还可以包括光鼠,光鼠是不显示可视输出的触摸敏感表面,或者是由触摸屏形成的触摸敏感表面的延伸。

RF电路405,主要用于建立手机与无线网络(即网络侧)的通信,实现手机与无线网络的数据接收和发送。例如收发短信息、电子邮件等。具体地,RF电路405接收并发送RF信号,RF信号也称为电磁信号,RF电路405将电信号转换为电磁信号或将电磁信号转换为电信号,并且通过该电磁信号与通信网络以及其他设备进行通信。RF电路405可以包括用于执行这些功能的已知电路,其包括但不限于天线系统、RF收发机、一个或多个放大器、调谐器、一个或多个振荡器、数字信号处理器、CODEC(COder-DECoder,编译码器)芯片组、用户标识模块(Subscriber Identity Module,SIM)等等。

音频电路406,主要用于从外设接口403接收音频数据,将该音频数据转换为电信号,并且将该电信号发送给扬声器411。

扬声器411,用于将手机通过RF电路405从无线网络接收的语音信号,还原为声音并向用户播放该声音。

电源管理芯片408,用于为CPU402、I/O子系统及外设接口所连接的硬件进行供电及电源管理。

本发明实施例提供的智能终端,在发生内存泄露事件时,能够及时获取应用程序和操作系统底层的内存使用信息,使智能终端的所有内存使用情况一览无余,便于准确地定位及分析内存泄漏原因。

上述实施例中提供的信息获取装置及智能终端可执行本发明任意实施例所提供的信息获取方法,具备执行该方法相应的功能模块和有益效果。未在上述实施例中详尽描述的技术细节,可参见本发明任意实施例所提供的信息获取方法。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1