具体实施方式
下面结合附图对本发明的应用程序运行方法的具体实施方式作详细描述。
参考图1所示,图1为一个实施例的应用程序运行方法流程图,包括如下步骤:
步骤S10:将应用程序各个进程设置为前台进程或后台进程。
步骤S30:将所述前台进程设置在操作系统的前台运行,将所述后台进程设置在操作系统的后台运行。
步骤S50:在所述前台进程切换至后台运行后,终止运行所述前台进程,并释放其占用的内存。
本实施例的应用程序运行方法,通过设置前后台分离的双进程同时运行的方案,将应用程序的部分进程(如UI显示和非驻留逻辑运行)设置为前台进程,在操作系统前台运行,将部分进程(如系统事件监听和驻留逻辑运行)设置在后台驻留运行,当前台进程由前台转入后台运行后,及时释放其占用的内存,从而可以达到节省内存的目的,提高了内存使用效率,提升了程序运行效率。
在一个实施例中,前台进程包括程序界面及其子元素呈现进程、UI控件事件处理进程、非持久运行的数据处理逻辑进程。其中,程序界面及其子元素呈现进程主要包括页面、弹窗或动画等;UI控件事件处理进程主要包括按钮响应、文本输入或列表刷新等;非持久运行的数据处理逻辑进程主要包括临时性文件处理或数据库读写等。
Android系统作为当前主流移动操作系统平台,支持多任务处理,可以同时运行多个应用程序。通过调用系统LowMemoryKiller主动杀死某些进程。其中,LowMemoryKiller是根据进程的优先级来决定是否杀死该进程,其优先级顺序由高到低依次是:FOREGROUD_APP、VISIBLE_APP、SECONDARY_SERVER、HIDDEN_APP、CONTENT_PROVIDER、EMPTY_APP,进程优先级越低,则最有可能先被杀死。
在Android系统中,前台进程主要对应于Activity组件以及各种布局元素实现。前台交互发生时,将前台进程为设为FOREGROUD_APP进程,其优先级最高,系统不会杀死这些进程,当用户选择退出前台操作(如Back键)或者切换至桌面(如Home键),将前台进程优先级降低,可以主动杀死前台进程,或者调用系统的LowMemoryKiller杀死该进程,从而节省内存空间。
对于后台进程,包括系统事件监听进程、持久运行的数据处理逻辑进程。其中,系统事件(Event)监听进程主要包括短信/彩信收发、来电/去电接听与挂断、系统时钟或系统启动/关闭等;持久运行的数据处理逻辑进程主要包括联网流量统计、程序安装/卸载事件或系统权限访问统计等。
在Android系统中,后台进程主要对应于Service组件和Receiver组件。后台进程拥有Service组件,即其至少拥有SECONDARY_SERVER优先级,高于HIDDEN_APP,一般不会被系统杀死,所以应用切换至后台状态后,前台进程可能被杀死,后台进程则会常驻内存,此时后台进程所占用的内存即为整个应用程序占用的内存,通过限制后台进程的逻辑功能,仅保留需要常驻的最小代码集合,保证其内存占用最小,就可以大幅度降低系统,特别是待机状态下的内存消耗。
在一个实施例中,步骤S50还包括:当用户点击应用程序图标时,启动所述应用程序的各个前台进程,并在启动所述前台进程后,发送消息至各个后台进程的Service组件(服务组件)启动对应的后台进程。
在本实施例中,提供了前后台双进程的启动方式,在应用程序安装后,用户点击程序图标触发前台进程启动,在前台进程启动完成后通过发送消息至后台进程的Service组件来启动后台进程。
在一个实施例中,步骤S50在终止运行该前台进程前还包括:维持执行所述前台进程切换时正在处理的逻辑。
在本实施例中,考虑到一些前台进程在切换至后台运行时,该进程所执行的逻辑处理并不能马上被终止,另外也是考虑到用户错误操作而将前台进程切换至后台运行,因此,针对于某些逻辑处理,可以通过维持执行前台进程切换时正在处理的逻辑,在执行完毕后再终止该进程以释放内存,从而保证切换时正在处理的逻辑能够得到安全、合理的处理。
进一步地,上述维持执行所述前台进程切换时正在处理的逻辑的步骤可以包括如下:
若所述前台进程不包含Service组件,则在该前台进程中添加一个设定的Service组件,利用该Service组件执行所述前台进程切换时正在处理的逻辑;若所述前台进程包含Service组件,则利用所述Service组件执行所述前台进程切换时正在处理的逻辑。
例如,在Android系统中,当前台进程切换至后台时,其优先级通常会下降至HIDDEN_APP级别,此时,如果其中没有处于运行状态的Service组件,前台进程将成为系统缓存进程,在内存不足的情况下,系统会优先杀死此类进程。
为了避免前台进程切换至后台后被即刻杀死,可以设置以下处理机制:
(1)若前台进程中没有Service组件,在切换至后台后,由于仍需要延时处理某些逻辑,因此不能将其放入系统缓存进程被终止,则可以为该前台进程添加一个简单(空实现)的Service组件,在延时执行所述逻辑处理完成后,停止该Service组件并将前台进程放入系统缓存进程队列,避免被系统杀死,这样可以保证前台进程数据处理的安全性和一致性。
(2)若前台进程本身已包含Service组件,则在保证数据安全性和一致性的前提下,当所有逻辑处理完成后停止所有的Service组件,让前台进程能够进入缓存进程队列,这样更有利于系统释放进程和回收内存。
在一个实施例中,步骤S50进一步包括:当后台进程进行前台逻辑处理时,将所述前台逻辑处理的消息请求发送至对应的前台进程,利用所述前台进程根据所述消息请求进行所述前台逻辑处理。
具体的,后台进程监听到事件后需要通过某种交互方式提示用户或者触发一个临时性的数据操作,此时,需要后台进程也能执行该前台操作,但为了节省内存,通过上述处理机制,不通过后台进程执行此类逻辑,而是通过进程间通信机制,发送消息至对应的前台进程,并有该前台进程来完成具体的业务操作。
在本实施例中,通过建立上述进程间的通信机制,可以由后台进程发送消息至前台进程,由后者完成具体的业务操作,从而可以节省内存。
例如,在Android系统中,上述进程间的通信机制可以包括两种处理方式:
(1)若所述消息请求为UI显示,则将所述消息请求封装在Intent对象中,发送至对应的前台进程,利用该前台进程调用对应的Activity组件进行UI显示。
具体的,对于需要UI显示的消息处理,使用Android系统的Intent消息传递机制,将消息请求封装在Intent对象中发送至前台进程,由该前台进程调用具体的Activity组件完成显示显示操作。
上述处理方式,避免了直接使用Android系统自带的提供的用于后台UI显示的WindowManager服务,由此可以保证后台进程完全不用处理极耗内存的UI逻辑,从而有效地节省了内存空间。
(2)若所述消息请求为非UI显示,则根据接口定义语言对应的进程间通信接口,根据该进程间通信接口将消息数据传递至对应的前台进程进行处理。
具体的,对于非UI显示的消息处理,使用Android系统提供的轻量级IPC-RPC(RemoteProcedureCall,远程进程调用)来完成,即通过定义AIDL(AndroidInterfaceDefinitionLanguage)接口文件来定义IPC接口,由前台进程实现该接口,后台进程调用该接口的本地代理,将消息数据传递至前台进程进行相应处理。
上述处理方式,利用IPC调用方式,高效且轻量,可以避免在后台进程处理非持久逻辑,特别是临时大数据处理操作带来的内存开销。
在本实施例中,由于引入前、后台双进程运行机制,后台可以仅保留最小集合的驻留代码,当后台进程进行前台逻辑处理(如监听到事件后需要通过交互方式提示用户或者触发一个临时性的数据操作)时,后台进程不直接执行此类逻辑,而是通过进程间通信机制发送消息到前台,调用对应的前台进程完成具体的逻辑处理。通过上述处理方式,可以达到减少后台驻留进程占用内存的目的,提高系统内存使用效率。
在一个实施例中,在所述终止运行所述前台进程时,若用户重新进入该前台进程的程序界面或该前台进程被调用,则重新运行该前台进程。
进一步地,若上述调用的前台进程已被终止,则重新启动所述前台进程并利用该前台进程执行相应的逻辑处理。
例如,在Android系统中,后台进程发起IPC调用时,若对应的前台进程已被终止,则可通过启动Activity组件或Service组件重新拉起前台进程。
在本实施例中,提供了前后台双进程的终止方式,可以更合理地进行进程的切换和终止,从而节省更多内存。
例如,在Android系统中,当用户退出前台操作时,前台进程切换至后台成为缓存进程,此时,为了避免系统直接终止该前台进程导致重复启动操作,可以设定以下合理终止机制:
(1)如果用户重新进入应用界面,则将其优先级设为FOREGROUD_APP进程(优先级最高),使该前台进程重新启动。
(2)如果后台进程发起IPC调用时,可以提高其优先级,将其从系统缓存进程中移除,避免该前台进程被完全终止,如果有UI显示,则将其重新设为FOREGROUD_APP进程,避免被终止。
(3)如果是用户主动终止前台进程或者被系统杀死,则可以直接终止该前台进程以释放更多可用内存。
以上为本发明的应用程序运行方法的实施例,需要声明的是,本发明的应用程序运行方法的各种实施方式,并不限定于上述各实施例中阐述的适应于Android系统中,也可以适用于具有类同性质的操作系统中。
本发明提出的应用程序运行方法,将应用程序分离为前后台两个进程,当系统需要更多内存时,可及时终止内存消耗大的前台进程以获取更多的内存空间,而后台进程能够稳定长时间运行,却极少消耗内存,这样就可以从总体上节省了应用程序和系统的内存空间,并保证了应用程序和系统运行的稳定性和可靠性。
下面结合附图对本发明的应用程序运行系统的具体实施方式作详细描述。
参见图2所示,图2为一个实施例的应用程序运行系统结构示意图,主要包括:
前后台进程设置模块10,用于将应用程序各个进程设置为前台进程或后台进程。
双进程运行模块30,用于将所述前台进程设置在操作系统的前台运行,将所述后台进程设置在操作系统的后台运行。
进程切换运行模块50,用于在所述前台进程切换至后台运行后,终止运行所述前台进程,并释放其占用的内存。
在一个实施例中,所述双进程运行模块30还用于:当用户点击应用程序图标时,启动所述应用程序的各个前台进程,并在启动所述前台进程后,发送消息至各个后台进程的Service组件启动对应的后台进程。
在一个实施例中,所述进程切换运行模块50还用于:维持执行所述前台进程切换时正在处理的逻辑。
进一步地,所述进程切换运行模块50维持执行所述前台进程切换时正在处理的逻辑的方法包括:
若所述前台进程不包含Service组件,则在该前台进程中添加一个设定的Service组件,利用该Service组件执行所述前台进程切换时正在处理的逻辑。
若所述前台进程包含Service组件,则利用所述Service组件执行所述前台进程切换时正在处理的逻辑。
在一个实施例中,所述进程切换运行模块50还用于:当后台进程进行前台逻辑处理时,将所述前台逻辑处理的消息请求发送至对应的前台进程,利用所述前台进程根据所述消息请求进行所述前台逻辑处理。
进一步地,所述进程切换运行模块50在终止运行所述前台进程的过程中,若用户重新进入该前台进程的程序界面或该前台进程被调用,则重新运行该前台进程。
在一个实施例中,,所述进程切换运行模块50还用于:若所述调用的前台进程已被终止,则重新启动所述前台进程并利用该前台进程执行相应的逻辑处理。
进一步地,所述操作系统为Android系统,所述进程切换运行模块50进一步用于:
若所述消息请求为UI显示,则将所述消息请求封装在Intent对象中,发送至对应的前台进程,利用该前台进程调用对应的Activity组件进行UI显示。
若所述消息请求为非UI显示,则根据接口定义语言对应的进程间通信接口,根据该进程间通信接口将消息数据传递至对应的前台进程进行处理。
在一个实施例中,所述前台进程包括:程序界面及其子元素呈现进程、UI控件事件处理进程和/或非持久运行的数据处理逻辑进程。其中,程序界面及其子元素呈现进程主要包括页面、弹窗或动画等;UI控件事件处理进程主要包括按钮响应、文本输入或列表刷新等;非持久运行的数据处理逻辑进程主要包括临时性文件处理或数据库读写等。
在一个实施例中,所述后台进程包括:系统事件监听进程和/或持久运行的数据处理逻辑进程。其中,系统事件(Event)监听进程主要包括短信/彩信收发、来电/去电接听与挂断、系统时钟或系统启动/关闭等;持久运行的数据处理逻辑进程主要包括联网流量统计、程序安装/卸载事件或系统权限访问统计等。
本发明的应用程序运行系统与本发明的应用程序运行方法一一对应,在上述应用程序运行方法的实施例阐述的技术特征及其有益效果均适用于应用程序运行系统的实施例中,特此声明。
下面对本发明的应用程序的具体实施方式作详细描述。
一种应用程序,包括:前台进程集和后台进程集。
所述前台进程集中的前台进程在操作系统前台运行,所述后台进程集中的进程在操作系统后台运行。
当所述前台进程由前台切换至后台运行时,应用程序终止运行该前台进程,并释放其占用的内存。
本发明提供的应用程序,针对于操作系统多进程运行的特性,在程序架构上突破了现有的单进程应用设计,通过将应用程序分离为前台进程和后台进程,可以将占用内存较大的进程在前台运行,而后台仅保留需要常驻的最小代码集合的进程,应用程序由前台进程切换至后台运行后,及时终止运行并释放其占用的内存。从而从总体上节省了应用程序占用的内存空间,提高了内存使用效率,提升了程序运行效率,并保证了应用程序和系统运行的稳定性和可靠性。
进一步地,当所述后台进程进行前台逻辑处理时,所述后台进程将执行所述前台逻辑处理的消息请求发送至对应的前台进程,所述前台进程根据所述消息请求执行相应的逻辑处理。
本实施例中,通过建立上述进程间的通信机制,当应用程序的后台进程监听到事件后,需要进行前台操作时,由后台进程发送消息至对应前台进程,由该前台进程完成具体的业务操作,从而可以节省应用程序所占用的内存。
以上为本发明的应用程序的实施例,需要声明的是,本发明的应用程序的运行过程,可以基于本发明的应用程序运行方法的各种运行方式实施例来实现,特此声明。
参考图3所示,图3为一个应用实例的应用程序架构图,该实例为应用于Android系统(AndroidSystem)的程序架构,应用程序(Application)分为前台进程(Fore-groundProcess)和后台进程(Back-groundProcess)两部分,其中,前台进程主要对应于Activity组件和部分交互的Service组件,后台进程主要对应于Service组件和Receiver组件,后台程序主要是完成系统事件(Event)的监听功能,如短信/彩信收发功能(SMS/MMSservice)、来去电接听与挂断功能(Phoneservice)、系统时钟功能(Timerservice)等,前台进程与后台进程之间采用IPC(intent/RPC)进行通信。
本领域普通技术人员可以理解实现上述实施方式中的全部或部分流程,以及对应的系统,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各实施方式的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-OnlyMemory,ROM)或随机存储记忆体(RandomAccessMemory,RAM)等。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。