在应用程序中进行进程回收处理的方法及装置的制造方法_2

文档序号:9843974阅读:来源:国知局
的技术人员。需要说明是,在不冲突的前提下,本发明实施例和实施例中的技术特征可以相互结合。
[0085]图1示出了根据本发明一个实施例的在应用程序中进行进程回收处理的方法的流程图。如图1所示,该方法包括:
[0086]步骤S102,监听预设的进程回收事件;
[0087]步骤S104,当监听到预设的进程回收事件时,获反射调用活动管理接口,通过活动监控器对象获取当前进程各组件的Map引用关系,基于Map引用关系获取当前进程内运行的各组件的属性信息;
[0088]步骤S106,将当前进程内运行的各组件的属性信息与进程回收规则对应的组件的属性信息进行比对,确定是否对当前进程进行回收处理。
[0089]本实施例提供的方法实现了对应用程序的进程的回收处理,首先设置了预设的进程回收事件,并对预设的进程回收事件进行主动监听,当监听到预设的进程回收事件时,每隔一预定时间段触发一次进程回收操作,即以轮询的方式触发进程回收操作,获取当前进程内运行的各组件的属性信息,进而将当前进程内运行的各组件的属性信息与进程回收规则对应的组件的属性信息进行比对,确定是否对当前进程进行回收处理。本实施例实现了对进程进行及时回收处理的目的,解决了现有技术中不能实现进程的及时回收,导致在回收之前进程仍然会长期占用内存资源的问题。并且,本实施例是将当前进程内运行的各组件的属性信息与进程回收规则对应的组件的属性信息进行比对,确定是否对当前进程进行回收处理,而不是仅仅根据进程的活跃度回收进程,从而使得操作系统应用的进程不会被回收掉,能够保证终端设备的正常运行。
[O(M)] 本实施例提供的方法主要适用于Android(安卓)系统。Android系统是一种处于不断演进状态的开源系统,其存在多个不同的版本,而不同的版本Android系统是处于并存的状态的。本实施例提供的方法主要适用于Android 2.X的版本。
[0091 ] 在上述方法中,为了通过IActivityWatcher对象(即活动监控器对象)获取当前进程内运行的各组件的属性信息,需要先注册IActivityWatcher对象。由于注册该对象的方法以及上层API (Applicat1n Programming Interface,应用程序编程接口)都是私有的,不允许被外界使用,必须通过反射的方式才可以使用,也就是说在上述方法中涉及的调用、获取等操作都是要通过反射的方式实现的,例如反射调用ActivityManagerNative.registerActivityWatcher 的操作、反身才获取Act ivityThread.mAct ivi ties、反身才获取 Activi tyThread.mServices等操作。
[0092]—般来说,Andro id系统都具备四大基本组件,分别是Acti vity (活动)、Service(服务)NContentProvider(内容提供者)、BroadcastReceiver(广播接收器),下面分别对这四个组件进行介绍。
[0093]首先,Activity是一个用户界面的概念,Activity通常表示应用程序中的一个屏幕。它通常包含一个或多个VieW(VieW是用户界面元素,是构成用户界面的基本构建块,View可以是一个按钮、标签、文本字段或者各种其他用户界面元素),但也可以不包含View。Activity与它这个词本身的含义很相似:帮助用户完成某一操作,这一操作可能是查看数据、创建数据或编辑数据。大部分Andr ο i d应用程序内都拥有多个Ac t ivity0
[0094]Android中的Service类似于Windows(窗口)或其他平台中的服务,它们都是可能长时间运行的后台进程。Android定义了两种类型的Service:本地Service和远程Service。本地Service是只能由承载该Service的应用程序访问的组件。而远程Service是供在设备上运行的其他应用程序远程访问的Service。电子邮件应用程序用于轮询新邮件的组件,就是一个Service示例。如果这种Service不能被在设备上运行的其他应用程序使用,那么它就是本地Service。如果有多个应用程序使用该Service,那么它就是远程Service。
[0095]Android为应用程序定义了一种标准机制来共享数据(比如联系人列表),无需公开底层存储、结构和实现。通过ContentProvider可以公开数据,允许应用程序使用来自其他应用程序的数据。
[0096]Android应用程序可以使用BroadcastReceiver对外部事件进行过滤,只对感兴趣的外部事件(如,当电话呼入时或者数据网络可用时)进行接收并做出响应。BroadcastReceiver没有用户界面,然而,它们可以启动一个Acti vity或Ser ice来响应它们收到的信息,或者用Notificat1nManager (通知管理类)来通知用户。通知可以用很多种方式来吸引用户的注意力,如闪动背灯、震动、播放声音等,一般来说可以在状态栏上放一个持久的图标,用户可以打开它并获取消息。
[0097]四大基本组件都需要注册才能使用,每个Acti vity、Service、ContentProvider都需要在AndroidManif est文件中进行配置。AndroidManifest文件中未进行声明的Activity、Service以及ContentProvider将不为系统所见,从而也就不可用,而BroadcastReceiver的注册分静态注册(在AndroidManif est文件中进行配置)和通过代码动态创建并以调用Context.registerReceiver()的方式注册至系统。需要注意的是,在AndroidManif est文件中进行配置的BroadcastReceiver会随系统的启动而一直处于活跃状态,即使程序未运行,只要接收到感兴趣的广播就会触发。
[0098]运行Android应用程序及其组件的进程会经历各种生命周期事件(Android应用程序的生命周期是由Android框架进行管理,而不是由应用程序直接控制),Android提供了回调,通过实现它们可以处理状态变化。
[0099]以一个Activity的各种生命周期回调为例,Activity的生命周期回调方法如下:onCreate()、onStart()、onRestart()、onResume()、onPause()、onStop()、onDestroy()o如图2所示为Activity的状态转换示意图。
[0100]系统可以根据发生的其他事件来启动和停止Activity。刚仓Il建Activity时,Android调用onCreateO方法,然后总是会调用onStartO,但调用onStartO之前并不总是调用onCreate(),因为可以在应用程序停止(调用onStop()之后调用onStart())。当调用on Star t()时,Activity对用户不可见,但稍后就会可见。在调用0113〖31'1:()之后,在Activity处于前台且能供用户访问时调用onResumeO,这时,用户就会与Activity交互。[Ο?Ο? ]当用户决定转到另一个Activity时,系统将调用当前401:;^;^7的011?31186()方法,然后可能调用onResume()或onStop()。例如,如果用户将当前Activity调回前台,将调用0111^8111116()。如果401:;^;^7变得对用户不可见,将调用onStop()。如果Activity调回了前台,那么在调用01151:(^()之后,将调用0111^8七31'1:0。如果4(31:;^;^7位于4(31:;^;^7桟中,但对用户不可见,并且系统决定结束该Activity,那么将调用onDestroyO。
[0102]在上述方法中,预设的进程回收事件可以包括:组件恢复事件,即触发进程回收操作MESSAGE_TRY_KILL_PROCESS的时机可以选定为检测到发生了组件恢复事件,例如可以在收到 IActivityWatcher.activityResuming()的回调后触发。
[0103]上述方法中提到的各组件的属性信息,主要是各组件的当前状态信息。下面进行详细的说明。
[0104]图3示出了根据本发明一个实施例的确定是否对当前进程进行回收处理的方法的流程图。如图3所示,该方法至少包括以下步骤S302至步骤S306。
[0105]步骤S302,判断当前进程内运行的各组件中是否存在被恢复的组件,若是,则继续执行步骤S304 ;否则,继续执行步骤S306。
[0106]在该步骤中,被恢复的组件为正处于前台运行的组件,也可以间接判断当前进程内运行的各组件中是否存在正处于前台运行的组件。
[0107]步骤S304,确定对当前进程不进行回收处理。
[0108]在该步骤中,被恢复的组件正处于前台运行的状态,则不对该组件所在的进程进行回收。
[0109]步骤S306,确定对当前进程进行回收处理。
[0110]在该步骤中,若当前进程内运行的各组件中不存在被恢复的组件,可以对当前进程进行回收处理,也可以采用后续提及的方法进一步判断。
[0111]在本发明一实施例中,可以对应用程序中的各进程设置计数字段(如当应用程序中的进程启动时,设置该进程的计数字段),用于对该进程中被恢复组件和/或被暂停的组件进行计数。例如,当接收到组件恢复事件(即调用onResumeO回调方法)时,对被恢复的组件所在进程的计数字段增加计数值;当接收到组件暂停事件(即调用onPause()回调方法)时,对被暂停的组件所在进程的计数字段减少计数值。
[0112]以Activity组件为例,当接收到Activity组件恢复事件时,对其所在进程的计数字段mResumedActivityCount增加计数值,如I或2等;当接收到Activity组件暂停事件时,对其所在进程的计数字段mResumedActivityCount减少计数值,如I或2等,本发明对此不做限制。
[0113]基于上文对应用程序中的各进程设置的计数字段,本发明实施例提供了一种实施上文步骤S302的可选方案,在该方案中,可以读取当前进程的计数字段,进而判断计数字段的计数值是否大于指定阈值,若是,则确定当前进程内运行的各组件中存在被恢复的组件;若否,则确定当前进程内运行的各组件中不存在被恢复的组件。
[0114]本发明实施例还提供了另一种可选地确定是否对当前进程进行回收处理的方案,图4示出了根据本发明另一个实施例的确定是否对当前进程进行回收处理的方法的流程图。如图4所示,该方法至少包括以下步骤S402至步骤S406。
[0115]步骤S402,判断当前进程是否为空进程或后台进程,若是,则继续执行步骤S404;否则,继续执行步骤S406。
[0116]在该步骤中,可以先获取当前进程的标识符,在系统中查找当前进程的标识符的RunningAppProcessInfo(该接
当前第2页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1