对终端的应用程序进行控制的方法及装置与流程

文档序号:11154603阅读:648来源:国知局
对终端的应用程序进行控制的方法及装置与制造工艺

本发明涉及计算机技术领域,具体涉及一种对终端的应用程序进行控制的方法及装置。



背景技术:

终端的应用程序(Application)运行在用户模式,它可以和用户进行交互,一般具有可视的用户界面。每一个应用程序运行于独立的进程,并拥有自己独立的地址空间。

目前,应用程序在启动时,为了能使用户有一个很好的体验,或者有时为了使应用程序能及时得到服务器传递过来的消息,从而不会使用户收到过时的消息,因此需要在后台保持应用程序运行(即,保持应用程序活性),但是一些厂商为了维护自己的终端(例如,手机)的流畅性,在应用程序退出后,台后会将应用程序的所有进程全部清除,这样对于一部分需要常驻内存的应用程序而言是不合适的。

例如,Android操作系统的做法是将尽量长时间地保持应用程序的进程,但为了新建进程或运行更重要的进程,最终需要清除旧进程来回收内存。为了确定保留或终止哪些进程,操作系统会根据进程中正在运行的组件以及这些组件的状态,将每个进程放入“重要性层次结构”中。必要时,操作系统会首先清除重要性最低的进程,然后是清除重要性稍低一级的进程,依此类推,以回收系统资源。

可见,对于一些需要长时间保持活性的应用程序,如何尽可能避免被操作系统清除掉,是需要解决的一个技术问题。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的对终端的应用程序进行控制的方法及装置。

依据本发明的一个方面,提供一种对终端的应用程序进行控制的方法,包括:为所述应用程序创建活动组件;对所述终端的锁屏事件以及解锁事件进行监听;当监听到所述终端的锁屏事件时,启动所述活动组件,当监听到所述终端的解锁事件时,销毁所述活动组件;通过启动及销毁所述活动组件,提高所述应用程序的进程优先级。

优选的,所述为所述应用程序创建活动组件,包括:在所述应用程序的进程中创建所述活动组件,且设置所述活动组件的属性为用户不可见。

优选的,所述对所述终端的锁屏事件以及解锁事件进行监听,包括:通过终端操作系统代码进行判定的方式,监听所述终端的锁屏事件以及解锁事件,或者,通过创建广播接收器,利用所述广播接收器接收终端操作系统的广播消息,从而监听所述终端的锁屏事件以及解锁事件。

优选的,所述方法还包括:确定所述应用程序在终端操作系统中的生命周期,并判断在所述生命周期内是否对所述应用程序执行了销毁操作。

优选的,在确定所述应用程序被执行了销毁操作之后,还包括:针对应用程序建立服务组件;通过发送终端操作系统通知,将服务组件设置为前台服务组件,从而提高应用程序的进程优先级。

依据本发明的另一个方面,提供一种对终端的应用程序进行控制的装置,所述装置包括:活动组件创建单元,用于为所述应用程序创建活动组件;监听单元,用于对所述终端的锁屏事件以及解锁事件进行监听;活动组件控制单元,用于当监听到所述终端的锁屏事件时,启动所述活动组件,当监听到所述终端的解锁事件时,销毁所述活动组件;进程优先级提高单元,用于通过启动及销毁所述活动组件,提高所述应用程序的进程优先级。

优选的,所述活动组件创建单元具体用于:在所述应用程序的进程中创建所述活动组件,且设置所述活动组件的属性为用户不可见。

优选的,所述监听单元具体用于:通过终端操作系统代码进行判定的方式,监听所述终端的锁屏事件以及解锁事件,或者,通过创建广播接收器,利用所述广播接收器接收终端操作系统的广播消息,从而监听所述终端的锁屏事件以及解锁事件。

优选的,所述装置还包括:应用程序销毁判断单元,用于确定所述应用程序在终端操作系统中的生命周期,并判断在所述生命周期内是否对所述应用程序执行了销毁操作。

优选的,在所述应用程序销毁判断单元确定所述应用程序被执行了销毁操作的情况下,所述装置还包括:服务组件创建单元,用于针对应用程序建立服务组件;服务组件控制单元,用于通过发送终端操作系统通知,将服务组件设置为前台服务组件,从而提高应用程序的进程优先级。

可见,本发明通过为应用程序创建活动组件,并在终端锁屏及解锁事件时分别进行启动和销毁该活动组件,由于应用程序在进入锁屏状态时,会首先唤醒应用程序的活动组件,使用该活动组件来达到使应用程序保持在前台的操作,由此来保持该应用程序的进程最高优先级状态,从而使应用程序一直保持活性。在操作系统强制关闭应用程序而导致上述通过活动组件提高应用程序的进程优先级失效的情况下,优选的,通过为应用程序创建服务组件并将服务组件设置为前台服务组件的方式对其进行补充,从而避免操作系统强制关闭应用程序而造成的应用程序被杀死的情况。总之,本发明通过提高应用程序的进程优先级,从而尽可能确保应用程序不被杀死。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明的一个实施例对终端的应用程序进行控制的方法流程图;

图2示出了根据本发明的另一个实施例对终端的应用程序进行控制的方法流程图;

图3示出了根据本发明的一个实施例对终端的应用程序进行控制的装置结构示意图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

本发明发明人在研究过程中发现,在系统中进程可能被杀死(kill)而导致该应用无法存活的原因有如下几个:

1、触发操作系统的进程管理

例如,Android系统提供进程管理功能,从进程的importance(重要性)的值由大到小依次杀死,以达到释放内存的目的。

2、被第三方应用程序杀掉

这里第三方应用程序可以杀掉的应用程序都是以OOM_ADJ=4以上的的进程,这里的OOM_ADJ为占用内存的优先等级,数值越高,越容易被杀死。而第三方可以杀死的只有大于4的进程才可以。

3、被厂商内置的进程杀掉

厂商内置的进程是可以杀掉所有进程的。因为厂商在修改Android系统时会使进程管理软件具有最高优先级,这样就可以杀掉所有包括Native进程(Native进程是由shell或者init启动的进程)。

4、用户主动点击强行停止

这里点击是用户进入到Android应用管理手动点击停止,因此可以杀掉所有可以显示的应用程序的进程。

通过上面分析可知,为了减少进程被杀死的概率,就要提高进程的优先级,从而减少进程在内存不足等情况下被杀死的概率。因此本发明方案中,通过提升应用程序的进程优先级,从而达到使应用程序保持活性的目的。

参见图1,为本发明提供的一种对终端的应用程序进行控制的方法。

概括而言,主要使用Android系统的活动组件(Activity组件)来实现应用程序的进程优先级提升,保证后台休眠时应用程序的优先级不会降低。利用操作系统的Activity来实现,实际上是监听手机锁屏解锁事件,在屏幕锁屏时启动Activity,在用户解锁时将Activity销毁掉。注意该Activity需设置成用户无感知。通过该方法,可以使进程的优先级在屏幕锁屏时间得到较大提升,例如,由4提升为最高优先级1。

具体的,该方法包括如下步骤S101-S104。

S101:为应用程序创建活动组件。

活动(Activity)组件,是Android系统的一个基础组件,是一种可以包含用户界面的组件,主要用于和用户进行交互。Android系统为每个应用程序创建一个单独的进程,所有组件运行在该进程中。因此,本发明实施例中,为了针对待控制的应用程序创建一个活动组件,就是在该应用程序的进程中创建一个活动组件。而且,为了避免给用户带来干扰,优选的,该活动组件是用户无感知的组件。

为应用程序创建活动组件的一个示例如下。

首先,创建一个Android系统的Activity,并对其参数进行设置。例如,具体设置为:将其宽高设为为1像素,并将位置置于左上方。该设置在新建的Activity的OnCreate方法中进行即可。其中,onCreate方法是在Activity创建时被系统调用的、Activity生命周期开始的函数;它主要做这个activity启动时一些必要的初始化工作。

然后,对该Activity的属性信息进行设置。例如,在AndroidManifest文件中的该activity的声明中设置如下属性信息:

android:exculdedFromRecents=“true”

android:exported=“false”

android:finishOnTaskLaunch=“false”

通过以上设置,可排除Activity在RecentTask中的显示。

其中,AndroidManifest是应用程序的清单文件,该文件记录了应用程序的一些重要配置信息。

最后,在Activity中将其设置为透明。例如,通过在style.xml文件中设置透明即可,设置方法是将背景设置为透明,并同时将窗体背景设置为空即可。

S102:对终端的锁屏事件以及解锁事件进行监听。

对于Android系统的锁屏事件及解锁事件,可以采取代码直接判定的方式或接收系统广播消息的方式进行监听。

1、代码直接判定方式

例如,通过PowerManager的isScreenOn方法,代码如下:

PowerManager pm=(PowerManager)

context.getSystemService(Context.POWER_SERVICE);

boolean isScreenOn=pm.isScreenOn();//如果为true,则表示屏幕“亮”了,否则屏幕“暗”了。

再如,通过KeyguardManager的inKeyguardRestrictedInputMode方法,代码如下:

KeyguardManager mKeyguardManager=(KeyguardManager)

context.getSystemService(Context.KEYGUARD_SERVICE);

boolean flag=mKeyguardManager.inKeyguardRestrictedInputMode();

上面的两种方法,也可以通过反射机制来调用。

2、接收系统的广播消息的方式

接收系统广播事件,屏幕在三种状态(开屏、锁屏、解锁)之间变换时,系统都会发送广播消息,只需要监听这些广播即可。例如,通过新建一个广播接收器,用于接收系统广播消息。

代码示例如下:

private ScreenBroadcastReceiver mScreenReceiver;

private class ScreenBroadcastReceiver extends BroadcastReceiver{

private String action=null;

@Override

public void onReceive(Context context,Intent intent){

action=intent.getAction();

if(Intent.ACTION_SCREEN_ON.equals(action)){

//开屏

}else if(Intent.ACTION_SCREEN_OFF.equals(action)){

//锁屏

}else if(Intent.ACTION_USER_PRESENT.equals(action)){

//解锁

}

}

}

private void startScreenBroadcastReceiver(){

IntentFilter filter=new IntentFilter();

filter.addAction(Intent.ACTION_SCREEN_ON);

filter.addAction(Intent.ACTION_SCREEN_OFF);

filter.addAction(Intent.ACTION_USER_PRESENT);

context.registerReceiver(mScreenReceiver,filter);

}

S103:当监听到终端的锁屏事件时,启动活动组件,当监听到终端的解锁事件时,销毁活动组件。

如上的第二种监听方式为例,Activity的启动与销毁都可以通过接收Android的广播来进行控制,主要是新建一个广播接收器,并在其中设置如果接收到Activity的状态改变时,将对其进行设置,设置方法为:当检测到当前的屏幕关闭,则使用开始唤醒新建的Activity,从而保持在休眠状态下使用新建的Activity让应用程序保持存活。当用户唤醒时,则可以停止掉该Activity,这时由于应用程序在休眠期间存活,因此用户唤醒时会打开应用程序,此时就可以不需要新建的那个Activity存活。

S104:通过启动及销毁活动组件,提高应用程序的进程优先级。

由于Android系统中,只要应用程序的一个Activity在前台,那么这个应用程序的进程优先级就不会被降低,永远是最高的。因此,当使用上述方法后,应用程序在进入锁屏状态时,会首先唤醒应用程序中预先设置的一个用户无法感知的Activity,使用该Activity来达到使应用程序保持在前台的操作。由此来保持该应用程序的进程最高优先级状态,从而使应用程序一直保持活性。

可见,在上述介绍的实施例中,为了使应用程序保持活性,是将应用程序的进程优先级提升到最高,这样应用程序就不会被轻易杀死。但是对于Android系统的应用程序而言,没有单独一个的办法可以绝对保证应用程序不被系统杀死。因此在本发明的另一个实施例子中,在上述图1对应方案失败情况下,开始执行另一种补充方式(下文结合图2介绍)。

如前分析的,使用上述图1对应方法作为首选,只有在图1方法失败情况下,再以另一种方法补充,那么,就需要判断上述图1方案是否生效。如果生效了,则无需继续执行补充方式,只有在失效情况下,才需要执行补充方式。

具体判断图1方式是否生效,可通过Android系统的方法来判断应用程序的生命周期,只要生命周期执行了OnDestory(销毁)操作,则判断该图1方式失效。如果失效则开始执行第二种补充方式。

例如,图1方式不生效的情况有:系统强制杀掉所有非系统相关进程,该执行时机是在内存发生了严重不足的情况下,系统为了保证系统自身的运行,不至于崩溃重启,这时就会将所有非系统进程杀掉以保证系统正常运行。

如果遇到上述情况发生,则可以使用第二种补充方式(具体的,利用系统通知消息)来提高应用程序的进程优先级,由于通知是由系统发出的,因此,可以避免上述系统强制杀掉进程情况的出现。

参见图2,为本发明另一个实施例提供的对终端的应用程序进行控制的方法流程图。

概括而言,该实施例中,是利用通知来提升优先级,其原理是由于Android系统中Service(服务)的优先级为4,通过setForeground接口可以将后台Service设置为前台Service,使进程的优先级由4提升为2,从而使进程的优先级仅仅低于用户当前正在交互的进程,与可见进程优先级一致,使进程被杀死的概率大大降低。

具体的,包括步骤S201-S202。

S201:针对应用程序建立服务组件;

服务(Service)组件,是Android系统的一个基础组件,作用是在后台处理一些耗时的逻辑,或者负责执行某些需要长期运行的任务。Android系统为每个应用程序创建一个单独的进程,所有组件运行在该进程中。因此,本发明实施例中,为了针对待控制的应用程序创建一个服务组件,就是在该应用程序的进程中创建一个服务组件。而且,为了避免给用户带来干扰,优选的,该服务组件是用户无感知的组件。

S202:通过发送系统通知,将服务组件为前台服务组件,从而提高应用程序的进程优先级。

从Android2.3开始,调用setForeground将后台Service设置为前台Service时,必须在系统的通知栏发送一条通知,也就是前台Service与一条可见的通知时绑定在一起的。

对于不需要常驻通知栏的应用程序而言,该方案虽可行,但却是用户感知的。因此,优选的,需要对其作出一些改变,改变如下:

通过实现一个内部Service,在LiveService和其内部Service中同时发送具有相同ID的Notification(通知),然后将内部Service结束掉。随着内部Service的结束,Notification将会消失,但系统优先级依然保持为2。

例如,具体实现示例如下:

新建一个后台服务,并在其setForeground中进行设置,用来提升Service的优先级为前台的Service,它的作用是使Service不容易被系统杀死。设置方法如下:将新建的服务设置其通知属性,使用service.startForeground(foregroundPushId,new Notifcation());来设置其存活度,但是由于系统在某些情况下将服务停掉(例如:内存不足)可能导致应用程序的主服务出现问题,因此同时需要将主服务信息setForeground设置为前台,设置同样使用上述代码,在设置完后需要执行stopSelf函数来结束掉。

可见,本发明通过为应用程序创建活动组件,并在终端锁屏及解锁事件时分别进行启动和销毁该活动组件,由于应用程序在进入锁屏状态时,会首先唤醒应用程序的活动组件,使用该活动组件来达到使应用程序保持在前台的操作,由此来保持该应用程序的进程最高优先级状态,从而使应用程序一直保持活性。在操作系统强制关闭应用程序而导致上述通过活动组件提高应用程序的进程优先级失效的情况下,优选的,通过为应用程序创建服务组件并将服务组件设置为前台服务组件的方式对其进行补充,从而避免操作系统强制关闭应用程序而造成的应用程序被杀死的情况。总之,本发明通过提高应用程序的进程优先级,从而尽可能确保应用程序不被杀死。

与上述方法实施例相对应,本发明还提供一种对终端的应用程序进行控制的装置,该装置可以是终端本身,也可以是终端内的功能模块,可以通过硬件、软件或软硬件结合的方式实现。本发明实施例中提到的终端包括手机、PC机、PAD等终端。

参见图3,示出了本发明对终端的应用程序进行控制的装置的结构示意图。该装置包括:

活动组件创建单元301,用于为所述应用程序创建活动组件;

监听单元302,用于对所述终端的锁屏事件以及解锁事件进行监听;

活动组件控制单元303,用于当监听到所述终端的锁屏事件时,启动所述活动组件,当监听到所述终端的解锁事件时,销毁所述活动组件;

进程优先级提高单元304,用于通过启动及销毁所述活动组件,提高所述应用程序的进程优先级。

优选的,所述活动组件创建单元301具体用于:在所述应用程序的进程中创建所述活动组件,且设置所述活动组件的属性为用户不可见。

优选的,所述监听单元302具体用于:通过终端操作系统代码进行判定的方式,监听所述终端的锁屏事件以及解锁事件,或者,通过创建广播接收器,利用所述广播接收器接收终端操作系统的广播消息,从而监听所述终端的锁屏事件以及解锁事件。

优选的,所述装置还包括:

应用程序销毁判断单元305,用于确定所述应用程序在终端操作系统中的生命周期,并判断在所述生命周期内是否对所述应用程序执行了销毁操作。

优选的,在所述应用程序销毁判断单元305确定所述应用程序被执行了销毁操作的情况下,所述装置还包括:

服务组件创建单元306,用于针对应用程序建立服务组件;

服务组件控制单元307,用于通过发送终端操作系统通知,将服务组件设置为前台服务组件,从而提高应用程序的进程优先级。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(DSP)来实现根据本发明实施例的用户变身控制的系统中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

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