应用的唤醒方法及装置
技术领域
本发明涉及计算机技术领域,特别是涉及一种应用的唤醒方法及装置。
背景技术
作为当下主流的手机操作系统,Android(安卓)程序安装包开发商鱼龙混杂,明争暗斗。应用程序能否争取更多的权限成为了安身立命的根本,在Root权限的争夺同时,设备的辅助功能又成了众多开发商众矢之的。实施中,辅助功能允许程序帮助用户进行设备操作,输入以及操作窗口元素等。
大部分程序在安装的时候一般都会引导应用去为自己开启辅助功能,其中很重要的用途便是帮助用户操作设备,很典型的例子就是豌豆荚和手机助手等软件的自动安装,其原理便是模拟用户点击,进行快速安装也就是所谓的自动安装。
但是,有一些程序利用这样的便宜,额外的去做一些打压竞争对手的事情,例如,利用应用程序的辅助功能来“强制停止”其他应用程序的行为。尤其是对于具备相同或相似功能的应用程序而言,因两者存在竞争关系,一些应用程序便会利用辅助功能的便宜去强制停止存在竞争关系的应用程序。“强制停止”使得应用软件的运行被强行关闭,对终端而言,容易造成某些功能的缺少,尤其是安全性能,可能会导致其他恶意程序(例如病毒、木马)的进入,甚至因应用软件之间的互相攻击造成系统崩溃。
发明内容
鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的应用的唤醒方法及装置。
基于本发明的一个方面,本发明实施例提供了一种应用的唤醒方法,其中,运行所述应用的系统中设置有所述应用的任务进程JobService,包括:
在系统中为所述任务进程配置对应的、在应用与系统间进行通信的通信中介类JobScheduler,其中,所述JobScheduler中至少包括所述应用的唤醒时间,以及所述应用的唤醒操作;
当系统时间运行至所述应用的唤醒时间时,由所述系统与所述JobScheduler通信,对所述JobScheduler进行激活;
由所述JobScheduler对所述任务进程发起所述唤醒操作,唤醒所述应用。
可选地,还包括:
判断所述应用的任务进程是否配置有所述JobScheduler;
若是,则将所述任务进程放入常驻进程中。
可选地,所述JobScheduler包括一次性JobScheduler和/或周期性JobScheduler。
可选地,所述JobScheduler中的所述应用的唤醒时间为满足指定条件才会执行时间,所述JobScheduler为一次性JobScheduler。
可选地,若所述JobScheduler为一次性JobScheduler,当所述任务进程被唤醒之后,为所述任务进程重新配置新的JobScheduler。
可选地,所述JobScheduler为周期性JobScheduler时,所述应用的唤醒时间为周期性唤醒。
可选地,周期性JobScheduler中设置有每两次相邻唤醒操作之间的时间差。
可选地,在系统中为所述任务进程配置对应的JobScheduler,包括:
在所述应用在系统中首次运行时,在系统中为所述任务进程配置对应的JobScheduler。
可选地,在所述应用在系统中首次运行时,在系统中为所述任务进程配置对应的JobScheduler,包括:
在所述应用的程序执行入口处即设置所述JobScheduler。
可选地,所述方法适用于特定版本的系统。
可选地,若所述方法被使用于所述特定版本以下版本的系统时,将系统中Service进程属性设置为非激活状态,以避免Service进程被调用。
可选地,若所述方法被使用于不具备所述任务进程的所述特定系统时,还包括:
对所述任务进程进行加载类文件到系统内存的loadClass操作,确定所述任务是否存在;
若系统中不具备所述任务进程,根据下载次数进行纠错处理,,以防止系统崩溃。
可选地,所述特定系统为安卓5.0以上版本的系统。
基于本发明的另一个方面,本发明实施例还提供了一种应用的唤醒装置,其中,运行所述应用的系统中设置有所述应用的任务进程JobService,包括:
配置模块,适于在系统中为所述任务进程配置对应的、在应用与系统间进行通信的通信中介类JobScheduler,其中,所述JobScheduler中至少包括所述应用的唤醒时间,以及所述应用的唤醒操作;
激活模块,适于当系统时间运行至所述应用的唤醒时间时,由所述系统与所述JobScheduler通信,对所述JobScheduler进行激活;
唤醒模块,适于由所述JobScheduler对所述任务进程发起所述唤醒操作,唤醒所述应用。
可选地,还包括:
判断模块,适于判断所述应用的任务进程是否配置有所述JobScheduler;
放入模块,适于若是,则将所述任务进程放入常驻进程中。
可选地,所述JobScheduler包括一次性JobScheduler和/或周期性JobScheduler。
可选地,所述JobScheduler中的所述应用的唤醒时间为满足指定条件才会执行时间,所述JobScheduler为一次性JobScheduler。
可选地,若所述JobScheduler为一次性JobScheduler,当所述任务进程被唤醒之后,为所述任务进程重新配置新的JobScheduler。
可选地,所述JobScheduler为周期性JobScheduler时,所述应用的唤醒时间为周期性唤醒。
可选地,周期性JobScheduler中设置有每两次相邻唤醒操作之间的时间差。
可选地,所述配置模块还适于:
在所述应用在系统中首次运行时,在系统中为所述任务进程配置对应的JobScheduler。
可选地,所述配置模块还适于:
在所述应用的程序执行入口处即设置所述JobScheduler。
可选地,所述装置适用于特定版本的系统。
可选地,若所述装置被使用于所述特定版本以下版本的系统时,所述配置模块还适于:将系统中Service进程属性设置为非激活状态,以避免Service进程被调用。
可选地,还包括:
试错模块,适于若所述装置被使用于不具备所述任务进程的所述特定系统时,对所述任务进程进行加载类文件到系统内存的loadClass操作,确定所述任务是否存在;若系统中不具备所述任务进程,根据下载次数进行纠错处理,,以防止系统崩溃。
可选地,所述特定系统为安卓5.0以上版本的系统。
在本发明实施例中,应用在系统中设置有对应的任务进程,当任务进程被唤醒时,应用就被启动。因此,本发明提供了一种应用的唤醒方法,在系统中为任务进程设置了、在应用与系统间进行通信的通信中介类JobScheduler,当系统时间运行至JobScheduler设置的唤醒时间时,由系统与JobScheduler通信,对JobScheduler进行激活,JobScheduler就会被自动激活,进而对相应的任务计划发起唤醒操作,从而实现应用启动的目的。采用本发明实施例的方法,由于JobScheduler是系统进程,不受其他应用的干扰,在JobScheduler的唤醒时间会自动激活,进而实现应用的自动启动。进一步,若系统中还安装有其他具备相同或相似功能的应用时,若这些应用启动辅助功能对当前应用进行强制停止时,正是由于JobScheduler的系统进程的特性,可以不受其他应用的干扰,即使被强制停止,也可以利用JobScheduler,在适当的时机重新启动。因此,对终端而言,采用本发明实施例提供的应用的唤醒方法,避免因强制停止造成某些应用被强行关闭,进而避免出现功能缺少的情况,尤其是安全性能,若避免被强行关闭,就可以防止病毒、木马等恶意程序的进入和攻击,并且,应用间的强制停止被禁止,也避免了应用之间的互相攻击所造成的系统崩溃。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
根据下文结合附图对本发明具体实施例的详细描述,本领域技术人员将会更加明了本发明的上述以及其他目的、优点和特征。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了根据本发明一个实施例的应用的唤醒方法的处理流程图;
图2示出了根据本发明一个实施例的在manifest.xml文件中注册自定义的JobService的语言示例图;
图3示出了根据本发明一个实施例的通过继承的方式实现下次唤醒任务的安排的语言示例图;
图4示出了根据本发明一个实施例的四种唤醒策略的语言示例图;
图5示出了根据本发明一个实施例的在应用的程序执行入口处即设置JobScheduler的语言示例图;
图6示出了根据本发明一个实施例的采用try-catch方式解决系统崩溃问题的语言示例图;
图7示出了根据本发明一个实施例的避免一些恶意程序绕过enable逻辑的语言示例图;
图8示出了根据本发明一个实施例的应用的唤醒装置的一个结构示意图;以及
图9示出了根据本发明一个实施例的应用的唤醒装置的另一个结构示意图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
为解决上述技术问题,本发明实施例提供了一种应用的唤醒方法。本发明实施例的技术构思如下:
Android5.0为了提高电池续航,增加了一个新特性,提供了一个新的API(Application Programming Interface,应用程序接口)——在应用与系统间进行通信的通信中介类(JobScheduler),它允许应用程序把一些当前不必要做的工作延后到恰当时机去执行,即,JobScheduler可以标记应用或者应用的某些功能的唤醒时间,只是告知系统在什么时候需要唤醒这些应用或者应用的某些功能。由于是JobScheduler系统特性,纵使应用被停止,甚至设备重新启动,JobScheduler也不会受到影响。具体实现时,系统启动的同时,会启动系统中的任务进程(JobService),而JobScheduler位于应用的进程中,通常可以通过AIDL((Android Interface Definition Language,Android接口定义语言)等手段来实现与系统中的JobService进行通信。
JobScheduler是作为接收开发者来设置应用被唤醒的条件的角色存在的,如果把这样的一个机制比作“闹钟叫人起床”的话,那么JobScheduler就等价于闹钟,用户在睡前只需要定好闹钟,就可以放心睡去了。那么起床的时候,闹铃会发出声音,用户的耳朵在接收到闹铃音之后会将大脑唤醒,那么紧接着用户才会从睡梦中醒来。其实在JobScheduler特性的使用中,还有一个扮演着“耳朵”角色的JobService,它也是Android5.0才出现的,与“耳朵”不同的是,在JobService中还可以做一些额外的事情,例如安排下一次闹钟等。
基于上述发明构思,本发明实施例对其提供的应用的唤醒方法进行相应说明,其中,运行应用的系统中设置有应用的任务进程(JobService)。图1示出了根据本发明一个实施例的应用的唤醒方法的处理流程图。参见图1,该方法至少包括步骤S102至步骤S106:
步骤S102、在系统中为任务进程配置对应的、在应用与系统间进行通信的通信中介类JobScheduler,其中,JobScheduler中至少包括应用的唤醒时间,以及应用的唤醒操作;
步骤S104、当系统时间运行至应用的唤醒时间时,由系统JobScheduler通信,对JobScheduler进行激活;
步骤S106、由JobScheduler对对应的任务进程发起唤醒操作,唤醒应用。
在本发明实施例中,应用在系统中设置有对应的任务进程,当任务进程被唤醒时,应用就被启动。因此,本发明提供了一种应用的唤醒方法,在系统中为任务进程设置了、在应用与系统间进行通信的通信中介类JobScheduler,当系统时间运行至JobScheduler设置的唤醒时间时,由系统与JobScheduler通信,对JobScheduler进行激活,JobScheduler就会被自动激活,进而对相应的任务计划发起唤醒操作,从而实现应用启动的目的。采用本发明实施例的方法,由于JobScheduler是系统进程,不受其他应用的干扰,在JobScheduler的唤醒时间会自动激活,进而实现应用的自动启动。进一步,若系统中还安装有其他具备相同或相似功能的应用时,若这些应用启动辅助功能对当前应用进行强制停止时,正是由于JobScheduler的系统进程的特性,可以不受其他应用的干扰,即使被强制停止,也可以利用JobScheduler,在适当的时机重新启动。因此,对终端而言,采用本发明实施例提供的应用的唤醒方法,避免因强制停止造成某些应用被强行关闭,进而避免出现功能缺少的情况,尤其是安全性能,若避免被强行关闭,就可以防止病毒、木马等恶意程序的进入和攻击,并且,应用间的强制停止被禁止,也避免了应用之间的互相攻击所造成的系统崩溃。
在本发明实施例中,应用的强制停止也可以称为该应用被杀死。因此,本发明的应用的唤醒方法从另外一个角度,也可以称为应用的免杀(避免被杀死)方法。在本发明的一个实施例中,可以判断应用的任务进程是否配置有JobScheduler,若是,则将任务进程放入常驻进程(例如GuardService进程)中。将系统会定时或者一定条件下唤醒的JobService放入GuardService进程中,这样一来,系统会按照事先的安排主动唤起JobService,就算JobService什么都不做,常驻进程也会被唤醒,甚至卫士被竞品强制停止,这样达到了免杀的目的。
本发明实施例能够称为解决免杀问题方法的原因正是因为JobScheduler是位于应用程序之外的角色,它是系统提供的,存活于系统的机制之内,不论当前应用的任务进程是后台运行方式还是已经停止运行了,JobScheduler都可以将当前应用唤醒,除非当前应用已经被用户卸载。
需要说明的是,因任务进程的不同,JobScheduler包括一次性JobScheduler和/或周期性JobScheduler。例如,任务进程是一次性任务,那么,JobScheduler相应的设置为一次性JobScheduler,当本次任务进程完成之后,JobScheduler也相应取消。对于JobScheduler而言,若JobScheduler中的应用的唤醒时间为满足指定条件才会执行时间,则确定该JobScheduler为一次性JobScheduler。实施时,若JobScheduler为一次性JobScheduler,当任务进程被唤醒之后,为任务进程重新配置新的JobScheduler。
现以具体实施例对本发明实施例提供的JobScheduler的具体设置方式进行说明。
实施例一
本实施例应用于安卓5.0以上系统。本实施例允许通过设置很多不同的选项来控制唤醒行为的执行,总结下来可以分为两类:定期唤醒(对应的将JobScheduler设置为周期性JobScheduler)、条件唤醒(对应的将JobScheduler设置为一次性JobScheduler)。
定期唤醒:需要设置好每两次唤醒之间的时间差;
条件唤醒:即等到条件满足时,才会设置执行唤醒。在此类下,又可细分为网络(是否联网,网络是否计费)、充电(设备是否在充电)、空闲(设备是否空闲)等多种条件设置。
JobScheduler在应用中的具体使用时,首先通过自定义实现JobService。其中,在manifest.xml文件中注册自定义的JobService的语言请参见图2。若是定期唤醒,即周期性JobScheduler,在自定义的过程中即可以设置JobService为周期性任务,从而实现JobScheduler周期性地唤醒启用的目的。
进一步,实现自定义JobService,并继承JobService,具体的执行语言请参见图3,通过继承的方式实现下次唤醒任务的安排,即再次安排JobScheduler。除了定期唤醒任务外,条件性唤醒任务都是一次性的,因此在没醒来的时候都要安排下次唤醒任务。这样,每次JobService被唤醒的时候,应用程序跟着就醒来了,进而实现唤醒应用的目的。
其中,图2、图3以及后文的图4-图6所示执行语言仅仅是一种示例,对于JobScheduler并不造成限定,请知。
同理,若任务进程执行的是周期性进程(例如每隔若干时间执行一次),那么,可以将JobScheduler也设置为周期性的,避免每次都需要重新设置一次JobScheduler,节省系统资源,尤其适用于周期性次数较多的情况下。对于JobScheduler而言,若JobScheduler为周期性JobScheduler时,应用的唤醒时间为周期性唤醒。其中,周期性JobScheduler中设置有每两次相邻唤醒操作之间的时间差。
实施例二
为将本发明实施例提供的唤醒策略阐述地更清楚,本发明实施例提供了四种唤醒策略,具体的执行语言请参见图4:
1、定期10min中唤醒一次
2、先推后10min,然后在充电条件下唤醒一次,每次唤醒的同时安排下次的本类型任务。
3、先推后10min,然后在设备闲置条件下唤醒一次,每次唤醒的同时安排下次的本类型任务。
3、先推后10min,然后在设备连接到不计费网络条件下唤醒一次,每次唤醒的同时安排下次的本类型任务。
需要说明的是,10min仅是一个示意值,具体的数值由实际情况而定。并且,在执行过程中,由于系统的省电特性,10min并不是一个准确值,在亮屏的状态下一般不会延迟太久,且熄屏状态下一般来说要比亮屏状态出发的更慢,具体的需要看设备系统的Rom权限。
进一步,为了JobScheduler能够尽早的工作,在应用在系统中首次运行时,即在系统中为任务进程配置对应的JobScheduler,随后即可为JobScheduler配置应用的唤醒周期和唤醒条件。更优选的,可以在应用的程序执行入口(例如Application:onCreate())处即设置JobScheduler。具体的执行语言请参见图5。前文提及,Android5.0为了提高电池续航,增加了一个新特性,提供了一个新的API——JobScheduler(JobScheduler),因此,本发明实施例提供的应用的唤醒方法适用于特定版本的系统,即具备JobScheduler的系统。在本发明实施例中,初步认为具备JobScheduler的系统即为Android5.0以上系统。若其他系统(ios等)也具备JobScheduler,则同样适用本发明实施例提供的应用的唤醒方法。
但是,考虑到本发明实施例提供的方法仅适用于具备JobScheduler的特定系统,那么对于不具备JobScheduler的其他系统(例如低于特定系统版本的系统,或者特定系统被人更改,使其缺乏JobScheduler特性),在使用时应如何处理,这是待解决的问题。
具体的,本发明实施例指出,若应用的唤醒方法被使用于特定版本以下版本的系统时,将系统中Service进程属性设置为非激活状态,以避免Service进程被调用。若应用的唤醒方法被使用于不具备任务进程的特定系统时,对任务进程进行加载类文件到系统内存的loadClass操作,确定任务是否存在;若系统中不具备任务进程,根据下载次数进行纠错处理(例如对下载次数进行try-catch处理),以防止系统崩溃。
具体的,以Android5.0为例进行相应说明。
实施例三
由于JobService是Android5.0新出现的API,如果在4.4及4.4以下等不含有JobService支持的机器上,被第三方(拥有系统权限的恶意程序)主动调用到的话,会使得应用程序直接崩溃。
针对上述威胁,不得不考虑一下两种情况:
1、在运行Android4.4及4.4以下版本系统的设备上,避免JobService被调用;
2、在运行Android5.0及5.0以上版本但被Rom提供者除去或者更改这一API的设备上,避免JobService被调用时程序崩溃。
本发明实施例提供了以下解决办法
对于1中提到的问题,可以利用Service的属性设置——android:enable。
如果此项设为“true”,那么该Service将会处于激活状态,但是系统不会启动该Service,要想启动服务,必须显示的调用startService()方法。否则,该项设置为“false”的话,该Service是处于非激活状态,程序或者系统是否无法使用该Service的。
因此可以将MyJobService的enable属性默认的设为“false”,在程序中判断当前的系统版本。
当前系统版本如果是5.0及其以上的话,就显示的利用PackageManager的serComponentEnabledSetting()方法将MyJobService的enable属性值设置为“true”,然后再进行JobScheduler的工作机制的设置操作;
否则,系统就什么也不做。
对于2中提到的问题,可以在进行设置MyJobService的enable属性操作前,先试着对MyJobService进行loadClass操作,如果系统阉割了JobService这一API,程序此时会出现异常,只需将次数进行try-catch处理,便可避免2中提到的崩溃情况。
在使用PackageManager.serComponentEnabledSetting方法的时候,其实会进行对MyJobService的loadClass的操作,因此只需在该段代码上加上一层try-catch,在出现异常的时候,不会更改enable属性,程序直接进入catch代码块,在catch中只需提示一下出错类型,然后什么也不做,就可以解决问题了。其中,示意的执行语言请参见图6。
进一步,为了避免一些恶意程序绕过enable逻辑,从外部恶意攻击应用程序(例如直接load的JobService)。本发明实施例可以通过自定义Classloader避免上述情况出现崩溃,在自定义的Classloader中,每次loadClass的时候可以执行如下处理:在正常loadClass失败的时候,如果加载的是MyJobServcie,则返回一个空的Service。示意代码请参见图7。
基于同一发明构思,本发明实施例还提供了一种应用的唤醒装置,其中,运行应用的系统中设置有应用的任务进程(JobService)。图8示出了根据本发明一个实施例的应用的唤醒装置的一个结构示意图。参见图8,该装置至少包括:
配置模块810,适于在系统中为任务进程配置对应的、在应用与系统间进行通信的通信中介类JobScheduler,其中,JobScheduler中至少包括应用的唤醒时间,以及应用的唤醒操作;
激活模块820,与配置模块810耦合,适于当系统时间运行至应用的唤醒时间时,由系统与JobScheduler通信,对JobScheduler进行激活;
唤醒模块830,与激活模块820耦合,适于由JobScheduler对任务进程发起唤醒操作,唤醒应用。
可选地,参见图9,应用的唤醒装置还可以包括:
判断模块910,适于判断应用的任务进程是否配置有JobScheduler;
放入模块920,与判断模块910耦合,适于若判断模块910的判断结果为是,则将任务进程放入常驻进程中。
可选地,JobScheduler包括一次性JobScheduler和/或周期性JobScheduler。
可选地,JobScheduler中的应用的唤醒时间为满足指定条件才会执行时间,JobScheduler为一次性JobScheduler。
可选地,若JobScheduler为一次性JobScheduler,当任务进程被唤醒之后,为任务进程重新配置新的JobScheduler。
可选地,JobScheduler为周期性JobScheduler时,应用的唤醒时间为周期性唤醒。
可选地,周期性JobScheduler中设置有每两次相邻唤醒操作之间的时间差。
可选地,配置模块810还适于:
在应用在系统中首次运行时,在系统中为任务进程配置对应的JobScheduler。
可选地,配置模块810还适于:
在应用的程序执行入口处即设置JobScheduler。
可选地,应用的唤醒装置适用于特定版本的系统。
可选地,若装置被使用于特定版本以下版本的系统时,配置模块810还适于:将系统中Service进程属性设置为非激活状态,以避免Service进程被调用。
可选地,应用的唤醒装置还包括:
试错模块930,与配置模块810耦合,适于若装置被使用于不具备任务进程的特定系统时,对任务进程进行加载类文件到系统内存的loadClass操作,确定任务是否存在;若系统中不具备任务进程,根据下载次数进行纠错处理,,以防止系统崩溃。
可选地,特定系统为安卓5.0以上版本的系统。
采用本发明实施例提供的应用的唤醒方法及装置能够达到如下有益效果:
在本发明实施例中,应用在系统中设置有对应的任务进程,当任务进程被唤醒时,应用就被启动。因此,本发明提供了一种应用的唤醒方法,在系统中为任务进程设置了、在应用与系统间进行通信的通信中介类JobScheduler,当系统时间运行至JobScheduler设置的唤醒时间时,由系统与JobScheduler通信,对JobScheduler进行激活,JobScheduler就会被自动激活,进而对相应的任务计划发起唤醒操作,从而实现应用启动的目的。采用本发明实施例的方法,由于JobScheduler是系统进程,不受其他应用的干扰,在JobScheduler的唤醒时间会自动激活,进而实现应用的自动启动。进一步,若系统中还安装有其他具备相同或相似功能的应用时,若这些应用启动辅助功能对当前应用进行强制停止时,正是由于JobScheduler的系统进程的特性,可以不受其他应用的干扰,即使被强制停止,也可以利用JobScheduler,在适当的时机重新启动。因此,对终端而言,采用本发明实施例提供的应用的唤醒方法,避免因强制停止造成某些应用被强行关闭,进而避免出现功能缺少的情况,尤其是安全性能,若避免被强行关闭,就可以防止病毒、木马等恶意程序的进入和攻击,并且,应用间的强制停止被禁止,也避免了应用之间的互相攻击所造成的系统崩溃。
在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。
类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。
本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。
此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。
本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的应用的唤醒装置中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。
应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。
至此,本领域技术人员应认识到,虽然本文已详尽示出和描述了本发明的多个示例性实施例,但是,在不脱离本发明精神和范围的情况下,仍可根据本发明公开的内容直接确定或推导出符合本发明原理的许多其他变型或修改。因此,本发明的范围应被理解和认定为覆盖了所有这些其他变型或修改。
基于本发明的一个方面,还公开了A1、一种应用的唤醒方法,其中,运行所述应用的系统中设置有所述应用的任务进程JobService,包括:
在系统中为所述任务进程配置对应的、在应用与系统间进行通信的通信中介类JobScheduler,其中,所述JobScheduler中至少包括所述应用的唤醒时间,以及所述应用的唤醒操作;
当系统时间运行至所述应用的唤醒时间时,由所述系统与所述JobScheduler通信,对所述JobScheduler进行激活;
由所述JobScheduler对所述任务进程发起所述唤醒操作,唤醒所述应用。
A2、根据A1所述的方法,其中,还包括:
判断所述应用的任务进程是否配置有所述JobScheduler;
若是,则将所述任务进程放入常驻进程中。
A3、根据A1所述的方法,其中,所述JobScheduler包括一次性JobScheduler和/或周期性JobScheduler。
A4、根据A3所述的方法,其中,所述JobScheduler中的所述应用的唤醒时间为满足指定条件才会执行时间,所述JobScheduler为一次性JobScheduler。
A5、根据A3或A4所述的方法,其中,若所述JobScheduler为一次性JobScheduler,当所述任务进程被唤醒之后,为所述任务进程重新配置新的JobScheduler。
A6、根据A3所述的方法,其中,所述JobScheduler为周期性JobScheduler时,所述应用的唤醒时间为周期性唤醒。
A7、根据A6所述的方法,其中,周期性JobScheduler中设置有每两次相邻唤醒操作之间的时间差。
A8、根据A1至A7任一项所述的方法,其中,在系统中为所述任务进程配置对应的JobScheduler,包括:
在所述应用在系统中首次运行时,在系统中为所述任务进程配置对应的JobScheduler。
A9、根据A8所述的方法,其中,在所述应用在系统中首次运行时,在系统中为所述任务进程配置对应的JobScheduler,包括:
在所述应用的程序执行入口处即设置所述JobScheduler。
A10、根据A1至A9任一项所述的方法,其中,所述方法适用于特定版本的系统。
A11、根据A10所述的方法,其中,若所述方法被使用于所述特定版本以下版本的系统时,将系统中Service进程属性设置为非激活状态,以避免Service进程被调用。
A12、根据A10所述的方法,其中,若所述方法被使用于不具备所述任务进程的所述特定系统时,还包括:
对所述任务进程进行加载类文件到系统内存的loadClass操作,确定所述任务是否存在;
若系统中不具备所述任务进程,根据下载次数进行纠错处理,以防止系统崩溃。
A13、根据A10至A12任一项所述的方法,其中,所述特定系统为安卓5.0以上版本的系统。
基于本发明的另一个方面,还公开了B14、一种应用的唤醒装置,其中,运行所述应用的系统中设置有所述应用的任务进程JobService,包括:
配置模块,适于在系统中为所述任务进程配置对应的、在应用与系统间进行通信的通信中介类JobScheduler,其中,所述JobScheduler中至少包括所述应用的唤醒时间,以及所述应用的唤醒操作;
激活模块,适于当系统时间运行至所述应用的唤醒时间时,由所述系统与所述JobScheduler通信,对所述JobScheduler进行激活所述;
唤醒模块,适于由所述JobScheduler对所述任务进程发起所述唤醒操作,唤醒所述应用。
B15、根据B14所述的装置,其中,还包括:
判断模块,适于判断所述应用的任务进程是否配置有所述JobScheduler;
放入模块,适于若是,则将所述任务进程放入常驻进程中。
B16、根据B14所述的装置,其中,所述JobScheduler包括一次性JobScheduler和/或周期性JobScheduler。
B17、根据B16所述的装置,其中,所述JobScheduler中的所述应用的唤醒时间为满足指定条件才会执行时间,所述JobScheduler为一次性JobScheduler。
B18、根据B16或B17所述的装置,其中,若所述JobScheduler为一次性JobScheduler,当所述任务进程被唤醒之后,为所述任务进程重新配置新的JobScheduler。
B19、根据B15所述的装置,其中,所述JobScheduler为周期性JobScheduler时,所述应用的唤醒时间为周期性唤醒。
B20、根据B19所述的装置,其中,周期性JobScheduler中设置有每两次相邻唤醒操作之间的时间差。
B21、根据B14至B20任一项所述的装置,其中,所述配置模块还适于:
在所述应用在系统中首次运行时,在系统中为所述任务进程配置对应的JobScheduler。
B22、根据B21所述的装置,其中,所述配置模块还适于:
在所述应用的程序执行入口处即设置所述JobScheduler。
B23、根据B14至B22任一项所述的装置,其中,所述装置适用于特定版本的系统。
B24、根据B23所述的装置,其中,若所述装置被使用于所述特定版本以下版本的系统时,所述配置模块还适于:将系统中Service进程属性设置为非激活状态,以避免Service进程被调用。
B25、根据B24所述的装置,其中,还包括:
试错模块,适于若所述装置被使用于不具备所述任务进程的所述特定系统时,对所述任务进程进行加载类文件到系统内存的loadClass操作,确定所述任务是否存在;若系统中不具备所述任务进程,根据下载次数进行纠错处理,以防止系统崩溃。
B26、根据B23至B25任一项所述的装置,其中,所述特定系统为安卓5.0以上版本的系统。