发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本申请提供了一种进程控制方法及装置。
有鉴于此,第一方面,本申请提供了一种进程控制方法,用于对程序的进程进行保护,该方法包括:
检测所述程序是否被结束;
当检测所述程序被结束时,利用预先创建的第一延时进程,在所述程序被结束的一段时间内,判断与所述程序相关联的第一预设维护service在内存中的运行状态;
当第一预设维护service的运行状态为结束运行时,调用onCreate函数重新启动所述程序的进程。
可选地,所述检测所述程序是否被结束,包括:
检测是否接受到清理所述程序的进程组的清理操作;
当检测到所述清理操作时,确定所述程序被结束。
可选地,所述方法还包括:
当第一预设维护service的运行状态为正在运行时,调用OnStartCommd函数。
可选地,所述方法还包括:
当所述程序的进程被重新启动后,利用jobScheduler延时策略生成一个第二延时进程;
利用第二延时进程创建一个与所述程序相关联的第二预设维护service;
利用所述第二延迟进程周期性对所述第二预设维护service在内存中的运行状态进行判断。
可选地,所述方法还包括:
在所述程序被结束的一段时间后,结束所述第一延时进程。
第二方面,本申请提供了一种进程控制装置,用于对程序的进程进行保护,该装置包括:
检测单元,用于检测所述程序的进程是否被结束;
判断单元,用于当检测所述程序被结束时,利用预先创建的第一延时进程,在所述程序被结束的一段时间内,判断与所述程序相关联的第一预设维护service在内存中的运行状态;
重启单元,用于当第一预设维护service的运行状态为结束运行时,调用onCreate函数重新启动所述程序的进程。
可选地,所述程序在运行时具有预先创建的、与所述程序相关联的第一预设维护service;
所述检测单元,包括:
操作检测单元,用于检测是否接受到清理所述程序的进程组的清理操作;
确定子单元,用于当检测到所述清理操作时,确定所述程序被结束。
可选地,所述装置还包括:
调用单元,用于当第一预设维护service的运行状态为正在运行时,调用OnStartCommd函数。
可选地,所述装置还包括:
进程生成单元,用于当所述程序的进程被重新启动后,利用jobScheduler延时策略生成一个第二延时进程;
服务创建单元,用于利用第二延时进程创建一个与所述程序相关联的第二预设维护service;
所述判断单元,还用于利用所述第二延迟进程周期性对所述第二预设维护service在内存中的运行状态进行判断。
可选地,所述装置还包括:
结束单元,用于在所述程序被结束的一段时间后,结束所述第一延时进程。
本申请实施例提供的上述技术方案与现有技术相比具有如下优点:
本申请实施例提供的该方法,在程序被结束后,可以利用预先创建的延时进程去判断程序对应的进程组是否已经全部被杀死,如果进程组已经被全部杀死,就可以重启该程序的进程。该方法在程序的进程组被杀死后,延迟一段时间又重启了该程序的另一个进程组,保证该程序对应的进程仍然可以在内存中存在。
因此,该方法可以避免将程序对应的进程组杀死后,程序就完全被清理,从而可以避免由于程序被完全清理而导致无法对系统的安全进行保护的问题。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请的一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例提供了一种进程控制方法,用于对程序的进程进行保护,该进程控制主要应用于安卓系统。
目前安卓主流的进程保活就是双进程守护,jni进程轮询,其方案主要用jobScheduler定时守护,这种双进程守护做法,适应于安卓5.0以下版本,但由于android5.0以上版本采用进程组的清理特点,也即一个App的所有进程都作为一个进程组,在清理时,直接将一个App对应的进程组全部杀死,所以,在安卓5.0以上版本如果用户手动清理缓存或者强制停止App,现有的jni进程轮询的方法将无效。
图1为本申请实施例提供的一种进程控制方法的流程示意图。
如图1所示,该方法可以包括以下步骤。
S101,检测所述程序是否被结束。
在本申请实施例中,安卓系统是指5.0版本以上的安卓系统,因此,在该步骤中,检测程序的进程是否被结束,是检测与程序对应的进程组是否被杀死或被清理。
该步骤可以包括以下步骤。
S1011,检测是否接受到清理所述程序的进程组的清理操作。
清理操作可以是对系统后台进程的清理操作,也可以是对应用的强制关闭操作。
S1012,当检测到所述清理操作时,确定所述程序被结束。
S102,当检测所述程序被结束时,利用预先创建的第一延时进程,在所述程序被结束的一段时间内,判断与所述程序相关联的第一预设维护service在内存中的运行状态。
延时进程是利用安卓系统的jobScheduler延时策略生成的,延时进程的逻辑是在对应的程序进程被杀死后,可以延时存活一段时间,并且在延时存活的这一段时间,可以判断和程序关联的第一预设维护service是否运行在内存中。
该步骤是在程序被杀死后,判断内存中是否还有与程序关联的第一维护service,如果没有第一维护service,那表示该程序对应的进程组已经被杀死,也即该程序需要被保护。
S103,当第一预设维护service的运行状态为结束运行时,调用onCreate函数重新启动所述程序的进程。
由于在步骤S102中判断出程序对应的第一预设维护service已经结束运行,所以在该步骤中,可以重启该程序,通常情况下,利用onCreate函数重新启动的是该程序的主进程。
本申请实施例提供的该方法,在程序被结束后,可以利用预先创建的延时进程去判断程序对应的进程组是否已经全部被杀死,如果进程组已经被全部杀死,就可以重启该程序的进程。该方法在程序的进程组被杀死后,延迟一段时间又重启了该程序的另一个进程组,保证该程序对应的进程仍然可以在内存中存在。
因此,该方法可以避免将程序对应的进程组杀死后程序就完全被清理,从而可以避免由于程序被完全清理而导致无法对系统的安全进行保护的问题。
在本申请一个实施例中,该方法还可以包括以下步骤。
当第一预设维护service的运行状态为正在运行时,调用OnStartCommd函数。
由于第一预设维护service还在运行,那么就没有必要重启该程序,进而直接调用OnStartCommd函数即可。
在本申请一个实施例中,该方法可以包括以下步骤。
S201,当所述程序的进程被重新启动后,利用jobScheduler延时策略生成一个第二延时进程;
S202,利用第二延时进程创建一个与所述程序相关联的第二预设维护service;
S203,利用所述第二延迟进程周期性对所述第二预设维护service在内存中的运行状态进行判断
本申请实施例提供的该方法,在每次程序启动后,都利用jobScheduler延时策略生成一个延时进程,延时进程可以创建一个新的维护service,并且延时进程可以周期性对程序的维护service的运行状态进行监控。
在一个实施例中,延时进程的周期可以为1s以内,一旦延时进程判断出维护service结束运行,那么延时程序就可以延迟一段时间后,利用jobScheduler延时策略再一个新的延时进程,这样就可以实现程序对应的进程组被关闭,仍然可以使得程序的进程在内存中保持存活。
因此,本申请实施例提供的该方法,相当于利用两个jobScheduler对应的延时进程,来维护一个程序的进程可以在内存中保持存活,进而能够使得该进程不会被常用的清除数据、强制停止等操作而关闭。当然如果用户在程序内设置将程序关闭,该程序在下次被清理后,仍然会被关闭。
在本申请一个实施例中,该方法还可以包括以下步骤。
在所述程序被结束的一段时间后,结束所述第一延时进程。
延时进程的逻辑就是在程序被杀死后,可以存活一段时间,进而在这一段时间之后,就可以直接结束。
同理,对于其它延时进程,在检测到程序对应的前一维护service被结束一段时间后都会自动结束。
本申请实施例还提供了一种进程控制装置,如图2所示,进程控制装置可以包括:
检测单元11,用于检测所述程序的进程是否被结束;
判断单元12,用于当检测所述程序被结束时,利用预先创建的第一延时进程,在所述程序被结束的一段时间内,判断与所述程序相关联的第一预设维护service在内存中的运行状态;
重启单元13,用于当第一预设维护service的运行状态为结束运行时,调用onCreate函数重新启动所述程序的进程。
在本申请一个实施例中,所述程序在运行时具有预先创建的、与所述程序相关联的第一预设维护service;
所述检测单元,包括:
操作检测单元,用于检测是否接受到清理所述程序的进程组的清理操作;
确定子单元,用于当检测到所述清理操作时,确定所述程序被结束。
在本申请一个实施例中,所述装置还包括:
调用单元,用于当第一预设维护service的运行状态为正在运行时,调用OnStartCommd函数。
在本申请一个实施例中,所述装置还包括:
进程生成单元,用于当所述程序的进程被重新启动后,利用jobScheduler延时策略生成一个第二延时进程;
服务创建单元,用于利用第二延时进程创建一个与所述程序相关联的第二预设维护service;
所述判断单元,还用于利用所述第二延迟进程周期性对所述第二预设维护service在内存中的运行状态进行判断。
在本申请一个实施例中,所述装置还包括:
结束单元,用于在所述程序被结束的一段时间后,结束所述第一延时进程。
为了描述的方便,描述以上装置时以功能分为各种单元分别描述。当然,在实施本发明时可以把各单元的功能在同一个或多个软件和/或硬件中实现。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的装置及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
可以理解的是,本发明可用于众多通用或专用的计算系统环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器系统、基于微处理器的系统、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何系统或设备的分布式计算环境等等。
本发明可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本发明,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上所述仅是本发明的具体实施方式,使本领域技术人员能够理解或实现本发明。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所申请的原理和新颖特点相一致的最宽的范围。