- 1、本文档共49页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
后台服务
服务绑定 调用者通过bindService()函数绑定服务 调用者通过bindService()函数绑定服务,并在第1个参数中将Intent传递给bindService()函数,声明需要启动的Service 第3个参数Context.BIND_AUTO_CREATE表明只要绑定存在,就自动建立Service 同时也告知Android系统,这个Service的重要程度与调用者相同,除非考虑终止调用者,否则不要关闭这个Service final Intent serviceIntent = new Intent(this,MathService.class); bindService(serviceIntent,mConnection,Context.BIND_AUTO_CREATE); 服务绑定 bindService()函数的第2个参数是ServiceConnnection 当绑定成功后,系统将调用ServiceConnnection的onServiceConnected()方法 当绑定意外断开后,系统将调用ServiceConnnection中的onServiceDisconnected方法 因此,以绑定方式使用Service,调用者需要声明一个ServiceConnnection,并重载内部的onServiceConnected()方法和onServiceDisconnected方法,两个方法的重载代码如下 private ServiceConnection mConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { mathService = ((MathService.LocalBinder)service).getService(); } @Override public void onServiceDisconnected(ComponentName name) { mathService = null; } }; 服务绑定 SimpleMathServiceDemo是绑定方式使用Service的示例 7.4.1 进程间通信 在Android系统中,每个应用程序在各自的进程中运行,而且出于安全原因的考虑,这些进程之间彼此是隔离的,进程之间传递数据和对象,需要使用Android支持的进程间通信(Inter-Process Communication,IPC)机制 在Unix/Linux系统中,传统的IPC机制包括共享内存、管道、消息队列和socket等等,这些IPC机制虽然被广泛使用,但仍然存在着固有的缺陷,如容易产生错误、难于维护等等 在Android系统中,没有使用传统的IPC机制,而是采用Intent和远程服务的方式实现IPC,使应用程序具有更好的独立性和鲁棒性 7.4远程服务 Android系统允许应用程序使用Intent启动Activity和Service,同时Intent可以传递数据,是一种简单、高效、易于使用的IPC机制 Android系统的另一种IPC机制就是远程服务,服务和调用者在不同的两个进程中,调用过程需要跨越进程才能实现 在Android系统中使用远程服务,一般按照以下三个步骤实现 使用AIDL语言定义远程服务的接口 根据AIDL语言定义的接口,在具体的Service类中实现接口中定义的方法和属性 在需要调用远程服务的组件中,通过相同的AIDL接口文件,调用远程服务 7.4.2 服务创建与调用 在Android系统中,进程之间不能直接访问相互的内存控件,因此为了使数据能够在不同进程间传递,数据必须转换成能够穿越进程边界的系统级原语,同时,在数据完成进程边界穿越后,还需要转换回原有的格式 AIDL(Android Interface Definition Language)是Android系统自定义的接口描述语言,可以简化进程间数据格式转换和数据交换的代码,通过定义Service内部的公共方法,允许在不同进程间的调用者和Service之间相互传递数据 AIDL的IPC机制、COM和Corba都是基于接口的轻量级进程通信机制 AIDL语言的语法与Java语言的接口定义非常相似,唯一不同之处在于,AIDL允许定义函数参数的传递方向 AIDL支持三种方向:i
文档评论(0)