《便携数据设备操作系统中的应用程序装置及其运行方法.pdf》由会员分享,可在线阅读,更多相关《便携数据设备操作系统中的应用程序装置及其运行方法.pdf(13页珍藏版)》请在专利查询网上搜索。
1、(10)申请公布号 CN 103425225 A(43)申请公布日 2013.12.04CN103425225A*CN103425225A*(21)申请号 201210151198.4(22)申请日 2012.05.16G06F 1/32(2006.01)G06F 9/54(2006.01)(71)申请人腾讯科技(深圳)有限公司地址 518044 广东省深圳市福田区振兴路赛格科技园2栋东403室(72)发明人张伟藏(74)专利代理机构北京德琦知识产权代理有限公司 11018代理人张晓峰 宋志强(54) 发明名称便携数据设备操作系统中的应用程序装置及其运行方法(57) 摘要本发明公开了一种便携数。
2、据设备操作系统中的应用程序装置及其运行方法,包括:网络服务进程模块在收到对应用程序的启动指令后,启动网络服务进程运行应用程序的网络服务层;界面逻辑进程模块在收到对应用程序的启动指令后,启动界面逻辑进程运行应用程序的界面逻辑层;在收到退出界面的指令后,结束所述界面逻辑进程;在收到显示界面的指令后,重新启动所述界面逻辑进程并显示界面;所述界面逻辑进程和网络服务进程通过进程间的通信接口进行通信。利用本发明,可以节省应用程序对设备资源的占用,提高应用程序运行的稳定性。(51)Int.Cl.权利要求书2页 说明书7页 附图3页(19)中华人民共和国国家知识产权局(12)发明专利申请权利要求书2页 说明书。
3、7页 附图3页(10)申请公布号 CN 103425225 ACN 103425225 A1/2页21.一种便携数据设备操作系统中的应用程序装置,其特征在于,包括:网络服务进程模块,用于在收到对应用程序的启动指令后,启动网络服务进程运行应用程序的网络服务层;界面逻辑进程模块,用于在收到对应用程序的启动指令后,启动界面逻辑进程运行应用程序的界面逻辑层;在收到退出界面的指令后,结束所述界面逻辑进程;在收到显示界面的指令后,重新启动所述界面逻辑进程并显示界面;所述界面逻辑进程和网络服务进程通过进程间的通信接口进行通信。2.根据权利要求1所述的装置,其特征在于,所述界面逻辑进程和网络服务进程通过进程间。
4、的通信接口进行通信,具体为:所述界面逻辑进程使用阻塞同步方式调用网络服务进程;所述网络服务进程使用非阻塞异步方式回调界面逻辑进程,将调用结果返回给界面逻辑进程。3.根据权利要求1所述的装置,其特征在于,所述进程间的通信接口为远程过程调用协议RPC接口。4.根据权利要求3所述的装置,其特征在于,所述操作系统为安卓Andriod操作系统,所述RPC接口为通过Android接口描述语言AIDL执行的AIDL接口。5.一种便携数据设备操作系统中应用程序的运行方法,其特征在于,包括:在收到对应用程序的启动指令后,采用双进程在所述操作系统中运行所述应用程序,其中应用程序的界面逻辑层运行在界面逻辑进程中,应。
5、用程序的网络服务层运行在网络服务进程中,所述界面逻辑进程和网络服务进程通过进程间的通信接口进行通信;当收到退出界面的指令后,结束所述界面逻辑进程,保留所述网络服务进行在后台继续运行;当收到显示界面的指令后,重新启动所述界面逻辑进程,显示界面。6.根据权利要求5所述的方法,其特征在于,所述界面逻辑进程和网络服务进程通过进程间的通信接口进行通信,包括:所述界面逻辑进程使用阻塞同步方式调用网络服务进程;所述网络服务进程使用非阻塞异步方式回调界面逻辑进程,将调用结果返回给界面逻辑进程。7.根据权利要求6所述的方法,其特征在于,所述网络服务进程使用非阻塞异步方式回调界面逻辑进程,具体为:网络服务进程回调。
6、界面逻辑进程的回调函数中包括真正的回调动作执行函数体,该回调函数调用界面逻辑进程的一个子线程执行,将所述真正的回调动作执行函数体post给界面逻辑进程的主线程,之后结束本次回调。8.根据权利要求6所述的方法,其特征在于,所述界面逻辑进程包括两个以上子线程,针对界面逻辑进程的每个子线程,都使用所述阻塞同步方式调用网络服务进程,具体的调用方式为:界面逻辑进程的子线程A所调用网络服务进程的调用函数中包括真正的调用动作执行函数体,所述界面逻辑进程的子线程A在调用该调用函数后阻塞;所述调用函数调用网络服务进程的一个子线程B执行,由该子线程B将所述调用动作执行函数体post给网络服务进程主线程的任务队列,。
7、之后阻塞该子线程B;所述网络服务进程主线程依次执行任务队列中的任务,一旦执行完毕所述子线程B post的调用动作执行函数体后,返回执行结果权 利 要 求 书CN 103425225 A2/2页3给子线程B,子线程B唤醒为非阻塞状态,并返回执行结果给界面逻辑进程中的子线程A,子线程A再唤醒为非阻塞状态。9.根据权利要求5所述的方法,其特征在于,所述进程间的通信接口为RPC接口。10.根据权利要求9所述的方法,其特征在于,所述操作系统为Andriod操作系统,所述RPC接口为通过Android接口描述语言AIDL执行的AIDL接口。11.根据权利要求10所述的方法,其特征在于,所述界面逻辑进程和网。
8、络服务进程通过AIDL接口进行通信的具体方式为:所述界面逻辑进程和网络服务进程中的一方向Andriod操作系统的绑定核心器发起绑定请求,其中包括本方进程的标识和对方进程的标识;所述绑定核心器在收到绑定请求后,为双方分配各自对应的AIDL接口,并将双方各自对应的AIDL接口进行绑定;所述绑定核心器将所分配的AIDL接口对应通知给所述绑定请求发起方进程及其对方进程;所述界面逻辑进程和网络服务进程中在收到对应的AIDL接口后,在有通信需求时,通过自身对应的AIDL接口向绑定核心器发送信息,绑定核心器按照所述双方进程的绑定关系调用对方进程对应的AIDL接口,由该AIDL接口发送所述信息到对方进程。12。
9、.根据权利要求5所述的方法,其特征在于,所述界面逻辑进程在操作系统的注册表中注册操作系统的广播接收器;所述显示界面的指令包括网络服务进程收到网络层消息后所发起的广播消息,该广播消息包括所述网络层消息;所述收到显示界面的指令后重新启动所述界面逻辑进程并显示界面,具体包括:操作系统的广播接收器接收到所述广播消息后,重新启动注册了广播接收器的所述界面逻辑进程,该界面逻辑进程对所述广播消息进行分析处理,按照分析处理结果显示对应的界面。权 利 要 求 书CN 103425225 A1/7页4便携数据设备操作系统中的应用程序装置及其运行方法技术领域0001 本发明涉及便携数据设备技术领域,尤其涉及一种便携。
10、数据设备操作系统中的应用程序装置及其运行方法。背景技术0002 目前便携数据设备被应用得越来越广泛。所谓便携数据设备,是指具有数据计算处理能力的便携式数码设备,例如智能手机、个人数字助(PDA,Personal Digital Assistant)、手持计算机(Pocket PC),平板电脑等。通常,这些便携数据设备上都安装有操作系统,例如常见的便携操作系统有:安卓(Android)操作系统、塞班(Symbian)操作系统、Windows mobile操作系统、以及苹果iPhone OS操作系统等等。基于便携数据设备的操作系统,可以运行各种应用程序(APP,Application),这些应用程。
11、序有操作系统自带的,但大部分应用程序都是独立于操作系统的第三方应用程序。0003 现有技术中,便携数据设备中的应用程序通常是运行在一个进程中。例如在Andriod操作系统中,通常包括四大组件,分别是:活动(Activity)组件,用于表现功能;服务(Service)组件,用于在后台运行服务,不提供界面呈现;广播接收器(BroadcastReceiver),用于接收广播;内容提供商(Content Provider)组件,用于支持在多个应用中存储和读取数据,相当于数据库。一个Andriod操作系统中的应用程序,就是包括相应的所述组件,使各个组件在同一个进程中相互运作,从而实现一个应用程序的具体功。
12、能。当需要退出当前界面时,只是退出所有的Activity组件,而保留Service组件继续运行,用于后台联网、接收消息通知等功能。0004 现有技术的缺陷是:0005 现有的这种在单进程中运行应用程序的方案,在界面开启、跳转后需要调用全局资源,例如包括图像缓存、数据库资源(如数据库引用和文件句柄等)、文件资源(如XML文件资源)、各种维系程序运行的全局变量等等资源;但是在退出界面后,所述全局资源并不需要继续调用,需要将这些全局资源进行释放,然而在单进程中,全局资源通常释放不彻底,从而浪费了大量的设备资源(如内存资源,计算资源等),并进而导致耗电量很高,对于内存不足的设备,很容易因为进程所占用的。
13、内存过大被强制关闭。尤其是利用java语言等不支持释放资源的编程语言编写的应用程序,由于编程语言本身不支持释放资源的操作,因此在退出界面后更会造成对设备资源和电量的浪费。同时,界面逻辑层的可能出现的缺陷将会影响整个进程,包括网络层的等核心功能,导致应用程序运行不稳定。发明内容0006 有鉴于此,本发明的主要目的在于提供一种便携数据设备操作系统中的应用程序装置及其运行方法,以节省应用程序对设备资源的占用,提高应用程序运行的稳定性。0007 本发明的技术方案是这样实现的:0008 一种便携数据设备操作系统中的应用程序装置,包括:说 明 书CN 103425225 A2/7页50009 网络服务进程。
14、模块,用于在收到对应用程序的启动指令后,启动网络服务进程运行应用程序的网络服务层;0010 界面逻辑进程模块,用于在收到对应用程序的启动指令后,启动界面逻辑进程运行应用程序的界面逻辑层;在收到退出界面的指令后,结束所述界面逻辑进程;在收到显示界面的指令后,重新启动所述界面逻辑进程并显示界面;0011 所述界面逻辑进程和网络服务进程通过进程间的通信接口进行通信。0012 一种便携数据设备操作系统中应用程序的运行方法,包括:0013 在收到对应用程序的启动指令后,采用双进程在所述操作系统中运行所述应用程序,其中应用程序的界面逻辑层运行在界面逻辑进程中,应用程序的网络服务层运行在网络服务进程中,所述。
15、界面逻辑进程和网络服务进程通过进程间的通信接口进行通信;0014 当收到退出界面的指令后,结束所述界面逻辑进程,保留所述网络服务进行在后台继续运行;0015 当收到显示界面的指令后,重新启动所述界面逻辑进程,显示界面。0016 与现有技术相比,本发明由于将界面逻辑层和网络服务层分别运行在两个进程中,当应用程序需要退出界面时,则将运行界面逻辑层的进程完全结束,只保留运行网络服务层的进程在后台运行,由于运行界面逻辑层的进程被完全杀掉(即结束),因此可以完全释放掉界面逻辑层所调用的全局资源,这样可以大大节省应用程序对设备资源的占用,其中不但节省了大量的内存资源,而且还节省了所述全局资源需要占用的运算。
16、资源,进而节省了电力,降低了应用程序对设备的耗电量。同时,由于界面逻辑层和网络服务层分别运行在两个进程中,界面逻辑层和网络服务层中各自的设计缺陷不会影响到对方,因此使得整个应用程序的稳定性得到了提高。附图说明0017 图1为本发明所述便携数据设备操作系统中的应用程序装置的一种组成示意图;0018 图2为本发明所述便携数据设备操作系统中应用程序运行方法的一种流程示意图;0019 图3为本发明所述界面逻辑进程和网络服务进程通过AIDL接口进行通信的一种流程示意图;0020 图4为本发明一种实施例中所述网络服务进程回调界面逻辑进程时的回调函数的一段代码示意图;0021 图5为本发明一种实施例中所述界。
17、面逻辑进程调用网络服务进程的调用函数的一段代码示意图。具体实施方式0022 下面结合附图及具体实施例对本发明再作进一步详细的说明。0023 图1为本发明所述便携数据设备操作系统中的应用程序装置的一种组成示意图。该应用程序装置用于执行本发明所述的方法,参见图1,该应用程序装置100包括:0024 网络服务进程模块101,用于在收到对应用程序的启动指令后,启动网络服务进程运行应用程序的网络服务层,该网络服务层例如包括网络收发及接收消息通知等功能;说 明 书CN 103425225 A3/7页60025 界面逻辑进程模块102,用于在收到对应用程序的启动指令后,启动界面逻辑进程运行应用程序的界面逻辑。
18、层;在收到退出界面的指令后,结束所述界面逻辑进程;在收到显示界面的指令后,重新启动所述界面逻辑进程并显示界面;0026 所述界面逻辑进程和网络服务进程通过进程间的通信接口进行通信。0027 本发明中,所述网络服务进程模块101和界面逻辑进程模块102需要在操作系统的注册表中注册应用程序的启动指令,该启动指令是同一个指令,当操作系统收到该启动指令后,则会通知所述网络服务进程模块101和界面逻辑进程模块102分别启动应用程序的网络服务层和应用程序的界面逻辑层,从而使得应用程序开始运行,此时,应用程序的界面在便携数据设备的前端显示。所述界面逻辑进程在运行过程中,一旦收到退出界面的指令,则结束当前运行。
19、的界面逻辑进程。所述界面逻辑进程模块102还需要在操作系统的注册表中注册显示界面的指令,当界面逻辑进程被结束后,一旦操作系统收到所述显示界面的指令,则会通知所述界面逻辑进程模块102重新启动所述界面逻辑进程并在便携数据设备的前端显示界面,从而利用两个进程完成应用程序前台界面的显示和退出。0028 本发明中,只要所述便携数据设备的操作系统具有进程间的通信接口,就可以使用本发明的方案来构建和运行其中的应用程序。例如对于某些便携数据设备操作系统,所述进程间的通信接口为远程过程调用协议(RPC)接口。PRC接口允许一个方法在本地进程调用,在远程(即在其它进程中)执行,结果返回给调用者。这意味着将方法调。
20、用及其附带的数据分解为操作系统可以理解的形式,将其由本地进程和地址空间传送到远程进程和地址空间中,在远程重新装配并执行该调用,返回值沿着相反的方向传递。在安卓Andriod操作系统中,所述RPC接口为通过Android接口描述语言(AIDL,Android Interface Definition Language)执行的AIDL接口。0029 为了防止所述网络服务进程和界面逻辑进程间的死锁,在本发明的一种实施例中,所述界面逻辑进程和网络服务进程通过进程间的通信接口进行通信时,具体可以为:所述界面逻辑进程使用阻塞同步方式调用网络服务进程;所述网络服务进程使用非阻塞异步方式回调界面逻辑进程,将调。
21、用结果返回给界面逻辑进程。0030 图2为本发明所述便携数据设备操作系统中应用程序运行方法的一种流程示意图。参见图2,该方法主要包括:0031 201、在收到对应用程序的启动指令后,采用双进程在所述操作系统中运行所述应用程序,其中应用程序的界面逻辑层运行在界面逻辑进程中,应用程序的网络服务层运行在网络服务进程中,所述界面逻辑进程和网络服务进程通过进程间的通信接口进行通信;0032 202、当收到退出界面的指令后,结束所述界面逻辑进程,保留所述网络服务进行在后台继续运行;0033 203、当收到显示界面的指令后,重新启动所述界面逻辑进程,显示界面。0034 本发明中,只要所述便携数据设备的操作系。
22、统具有进程间的通信接口,就可以使用本发明的方法来构建和运行其中的应用程序。例如对于某些便携数据设备操作系统,所述进程间的通信接口为远程过程调用协议(RPC)接口。在安卓Andriod操作系统中,所述RPC接口为通过AIDL执行的AIDL接口。0035 下面以常用的安卓(Andriod)操作系统中的应用程序为例,对本发明的方案进行说明。其他的具有进程间的通信接口的操作系统,其中的应用程序也可以采用本发明的方说 明 书CN 103425225 A4/7页7案。0036 本发明中,需要在操作系统的注册表中注册应用程序的启动指令,例如Andriod操作系统需要注册在AndroidManifest.xm。
23、l这个文件中,AndroidManifest.xml是Andriod操作系统的一个注册表文件,在这个文件中,开发者可以注册应用程序进程的指令和用到的组件,只有注册到该注册表文件中,一旦触发了对应的指令和组件,才可以找到对应的进程。本发明中,所述注册在操作系统注册表中的应用程序启动指令指向该应用程序的界面逻辑进程和网络服务进程,当操作系统收到该启动指令后,则同时启动所述界面逻辑进程和网络服务进程,从而使应用程序开始运行。0037 在运行过程中,一旦收到退出界面的指令,例如最小化窗口的指令、切换到其他应用程序界面的指令等,由于这些指令在界面逻辑进程运行过程中发出,因此可以只在界面逻辑进程中注册这些。
24、指令,当收到某个退出界面的指令后,则结束当前运行的界面逻辑进程,但是需要保留所述网络服务进程在后台运行,该网络服务进程为轻量级但是功能核心的后台进程,只保留该网络服务进程,即可以执行应用程序的核心功能,又可以节省对设备资源的占用,节省电能。0038 另外,还需要在操作系统的注册表中注册显示界面的指令,该指令指向所述界面逻辑进程。所述显示界面的指令可以有多种,例如可以时最大化应用程序界面的指令、调用前端界面的指令、或者是网络服务层收到网络消息而需要利用界面显示该网络消息的指令等等。当界面逻辑进程被结束后,一旦操作系统收到所述显示界面的指令,则重新启动所述界面逻辑进程并在便携数据设备的前端显示界面。
25、,从而利用两个进程完成应用程序前台界面的显示和退出。0039 本方法中,所述界面逻辑进程和网络服务进程之间的通信方式可以包括界面逻辑进程发起的调用通信和网络服务进程发起的广播通信。0040 对于界面逻辑进程发起的调用通信,通常是界面逻辑进程在需要请求网络数据时发起对网络服务进程的调用,网络服务层在收到调用后进行相应的处理获取网络数据,之后采用回调界面逻辑进程的方式将所述网络数据作为调用结果返回给所述界面逻辑进程。在一种实施例中,为了防止死锁问题,所述界面逻辑进程使用阻塞同步方式调用网络服务进程;所述网络服务进程使用非阻塞异步方式回调界面逻辑进程,将调用结果返回给界面逻辑进程。0041 对于网络。
26、服务进程发起的广播通信,需要由所述界面逻辑进程在操作系统的注册表(如Andriod操作系统的AndroidManifest.xml)中注册操作系统的广播接收器;当网络服务进程收到网络层消息后会发起广播消息,该广播消息包括所述网络层消息;操作系统的广播接收器接收到所述广播消息后,会将该广播消息发送给注册了广播接收器的所述界面逻辑进程,该界面逻辑进程对所述广播消息进行分析处理,按照分析处理结果显示对应的界面。0042 当收到退出界面的指令从而结束所述界面逻辑进程后,此时由于界面逻辑进程被结束,因此在收到显示界面的指令后需要首先重启该界面逻辑进程。在一种情况中,所述显示界面的指令包括网络服务进程收到。
27、网络层消息后所发起的广播消息,即该广播消息就相当于显示界面的指令,且广播消息中包括所述网络层消息,用于将该网络层消息广播出去。在这种情况下,如上所述,由于所述界面逻辑进程在操作系统的注册表中注册了操作系统说 明 书CN 103425225 A5/7页8的广播接收器,因此操作系统的广播接收器在接收到所述广播消息后,则将重新启动注册了广播接收器的所述界面逻辑进程,该界面逻辑进程对所述广播消息进行分析处理,按照分析处理结果显示对应的界面,如在界面中显示所述网络层消息的内容。0043 对于在Andriod操作系统中运行的应用程序,由于Andriod操作系统中用于进程间通信的RPC接口为通过Androi。
28、d接口描述语言(AIDL)执行的AIDL接口,因此对于所述界面逻辑进程和网络服务进程通过AIDL接口进行通信的具体方式有一定的特殊性。如图3为本发明所述界面逻辑进程和网络服务进程通过AIDL接口进行通信的一种流程示意图。参见图3,该流程包括:0044 301、所述界面逻辑进程和网络服务进程中的一方(如本图3中为界面逻辑进程)向Andriod操作系统的绑定核心器(Binder Kernel)发起绑定请求,其中包括本方进程的标识和对方进程的标识(如此处为网络服务进程的标识)。0045 302、所述绑定核心器在收到绑定请求后,为双方分配各自对应的AIDL接口,并将双方各自对应的AIDL接口进行绑定。。
29、例如此处为所述应用程序的界面逻辑进程分配AIDL接口1,为所述应用程序的网络服务进程分配AIDL接口2,并将所述AIDL接口1和AIDL接口2绑定。0046 303、所述绑定核心器将所分配的AIDL接口对应通知给所述绑定请求发起方进程及其对方进程。如此处将所述AIDL接口1通知给所述界面逻辑进程,将所述AIDL接口2通知给所述网络服务进程。0047 所述界面逻辑进程和网络服务进程中在收到对应的AIDL接口后,在有通信需求时,通过自身对应的AIDL接口向绑定核心器发送信息,绑定核心器按照所述双方进程的绑定关系调用对方进程对应的AIDL接口,由该AIDL接口发送所述信息到对方进程。例如图3的步骤3。
30、04及后续步骤为利用AIDL接口发起的一个调用通信过程,具体包括:0048 304、界面逻辑进程通过所述AIDL接口1发起一个调用通信请求,所述AIDL接口1将该调用通信请求发送给绑定核心器。0049 例如此处所述调用通信请求为调用网络服务进程的send()函数,例如该send()函数用于具体发送一个获取网络图片的请求。此处,为了防止两个进程之间的死锁和乱序,所述界面逻辑进程使用阻塞同步方式调用网络服务进程,即界面逻辑进程发起该调用通信请求后,立刻被挂起,即立刻被阻塞,该进程在收到网络服务进程的反馈之前不得再执行其它处理。0050 305、绑定核心器按照所述双方进程的绑定关系调用网络服务进程对。
31、应的AIDL接口2,由该AIDL接口2发送所述调用通信请求(即调用send()函数的请求)到网络服务进程。0051 306、网络服务进程通过所述AIDL接口2收到所述调用send()函数的请求,开始执行该send()函数,即向网络服务器发起一个获取网络图片的请求。0052 307、网络服务进程返回所述调用函数的处理结果,所述处理结果为该函数是否处理成功的信息,如果不成功需包含错误码等信息。此处还是通过AIDL接口2向所述绑定核心器返回所述处理结果。0053 308、所述绑定核心器收到所述处理结果后,通过所述AIDL接口1将该处理结果返回给界面逻辑进程,所述界面逻辑进程在收到该处理结果后被唤醒,。
32、即停止阻塞状态,可以说 明 书CN 103425225 A6/7页9继续进行其它处理操作。0054 309310、当网络服务进程收到服务器返回的图片(即callback数据)后,使用非阻塞异步方式回调界面逻辑进程,将所述图片作为所述send()函数的调用结果返回给界面逻辑进程,当然此处还是通过AIDL接口1和AIDL接口2的代理返回给界面逻辑进程。所述使用费阻塞异步方式是指,网络服务进程回调所述界面逻辑进程之后,不必阻塞等待界面逻辑进程的处理结果,就可以继续处理其它操作。0055 由于在某些操作系统如Andriod操作系统中,进程之间的调用通信都是阻塞同步方式,即调用方进程在调用被调方进程的函。
33、数时,需要阻塞,直到被调方进程返回结果后才能恢复非阻塞状态,因此,如果调用方和被调用方都采用阻塞同步方式进行通信,那么就有可能出现循环等待的可能性,即出现死锁。为了避免死锁,本发明中,在进行调用通信时,所述界面逻辑进程使用阻塞同步方式调用网络服务进程;所述网络服务进程使用非阻塞异步方式回调界面逻辑进程,将调用结果返回给界面逻辑进程,这样就可以避免死锁。0056 然而,某些操作系统如Andriod操作系统默认采用阻塞同步方式进行进程之间的调用通信,本发明中界面逻辑进程可以使用Andriod操作系统默认的阻塞同步方式调用网络服务进程。但是,网络服务进程怎样才能使用非阻塞异步方式回调界面逻辑进程呢?。
34、下面是本发明的具体方法:0057 如图4所示为本发明一种实施例中所述网络服务进程回调界面逻辑进程时的回调函数的一段代码示意图。参见图4,网络服务进程回调界面逻辑进程时的回调函数(如图4中的“callback”)是一个“假”阻塞函数,即将真正的回调动作执行函数体(如图4中的“callbackImp”)被包含在该回调函数中,该回调函数调用界面逻辑进程的一个子线程执行,其作用是用handler(handler为Andriod操作系统中的主线程和子线程之间的数据配合机制)将所述真正的回调动作执行函数体抛(post)给界面逻辑进程的主线程后就结束本次回调,返回执行结果(该执行结果中没有返回值,并不是真正。
35、回调动作执行函数体的执行结果,因此可以叫做“假”执行结果),网络服务进程收到这个“假”执行结果后即可恢复非阻塞状态,因此网络服务进程只是堵塞一会儿,不必等到界面逻辑进程执行所述真正的回调动作执行函数体之后才恢复非阻塞状态,因此可以不受界面逻辑进程处理结果的影响,防止死锁的发生。0058 如果界面逻辑进程中有两个以上子线程,并且这两个以上子线程都在调用同一个调用函数如所述send()函数时,则这些子线程会访问的相同的内部成员变量和成员函数,那么时序就会相当复杂,容易错乱,比如其中一个子线程修改了一个成员变量的值之后,另一个子线程又去读等,涉及到原子性操作时就要加锁,否则会有时序问题,但几个子线程。
36、同时交互也有可能出现死锁。为了防止这种情况下的时序错乱和死锁问题,本发明可以采用下述方法:0059 界面逻辑进程的子线程A所调用网络服务进程的调用函数中包括真正的调用动作执行函数体,所述界面逻辑进程的子线程A在调用该调用函数后阻塞;所述调用函数调用网络服务进程的一个子线程B执行,由该子线程B将所述调用动作执行函数体post给网络服务进程主线程的任务队列,之后阻塞该子线程B;所述网络服务进程主线程依次执行任务队列中的函数体,一旦执行完毕所述子线程B post的调用动作执行函数体后,返回执行结果给子线程B,子线程B唤醒为非阻塞状态,并返回执行结果给界面逻辑进程中的子线说 明 书CN 1034252。
37、25 A7/7页10程A,子线程A再唤醒为非阻塞状态。下面以图5为例进一步说明。0060 图5为本发明一种实施例中所述界面逻辑进程调用网络服务进程的调用函数的一段代码示意图。参见图5,其中括号的标号为该调用函数的执行顺序。假设界面逻辑进程还是调用网络服务进程的send()函数,该调用函数由界面逻辑进程中的一个子线程A调用,在调用后该界面逻辑进程的子线程A休眠(即阻塞状态),且该调用函数由网络服务进程中的一个子线程B执行,包括:0061 (1)将真正的调用执行函数体即sendImp()函数利用handler抛(post)给网络服务进程的主线程;0062 (2)之后,暂时将本子线程B休眠(即阻塞状。
38、态)。然后等待网络服务进程的主线程执行所述sendImp()函数的执行结果。所述网络服务进程的主线程会依次将任务队列的任务逐个执行;0063 (3)当网络服务进程的主线程执行到刚才抛出的事件时,则调用sendImp()函数;0064 (4)sendImp()执行完毕后,并赋值retCode,即返回执行结果;0065 (5)然后执行notify操作以唤醒刚才休眠的子线程B,该子线程B被唤醒,即处于非阻塞状态;0066 (6)所述子线程B返回执行结果给Binder Kernel,并结束该子线程B,同时Binder Kernel将唤醒界面逻辑进程中阻塞的子线程A,该Send()函数的调用动作执行完毕。
39、。0067 采用上述方法,即使同时有几个send()函数同时调用发生,那么它们的真正调用执行函数体sendImp()都是串行地(一个执行完再执行下一个)执行在网络服务进程的主线程中(即Service.mainLooper),所以这样既实现了返回执行结果的功能,同时又在一定程度上防止时序错乱导致的问题。0068 本发明所述的方案采用双进程架构模型,将应用程序的界面逻辑层和网络服务层解耦,分别运行于两个进程空间中。应用程序退到后台把界面层的进程退出,只留下轻量级但功能核心的后台进程在负责接收网络通知。通过实验比对,在同等操作场景下,使用本发明所述双进程架构的应用程序所占用的内存,比使用单进程架构的应用程序占用的内存,下降了2/3;而耗损电量则从80%降到30%。从这些数据来看,本发明大大节约了便携数据设备的资源,降低了耗电量。0069 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。说 明 书CN 103425225 A10。