- 1、本文档共32页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
8.2 Service的生命周期 (1)startService方式启动服务的生命周期 当使用startService方式启动服务时,服务会先执行onCreate()方法,接着执行onStartCommand()方法,此时服务处于运行状态,直到自身调用stopSelf()方法或者访问者调用stopService()方法时服务停止,最终被系统销毁。这种方式开启的服务会长期在后台运行,与访问者的状态没有关系。 8.2 Service的生命周期 (2) bindService方式启动服务的生命周期 当其他组件调用bindService()方法时,服务首先被创建,接着访问者通过Ibinder接口与服务通信。访问者通过unbindService()方法关闭连接,当多个访问者能绑定的一个服务上,当他们都解除绑定时,服务就会被直接销毁。这种方式开的服务与访问者有关,调用者销毁时,服务也会被销毁。 (3) 服务生命周期的方法介绍 onCreate():第一次创建服务时执行的方法。 onDestory():服务被销毁时执行的方法。 onStartCommand():访问者通过startService(Intent service)启动服务时执行的方法。 onBind():使用bindService()方式启动服务调用的方法。 onUnbind():解除绑定时调用的方法。 上述这些方法都是Service生命周期的重要回调方法,通过该方法可以看出服务从启动到停止所经历的过程。 8.2 Service的生命周期 Service生命周期的两种启动方式: 8.2 Service的生命周期 8.3 Service通信 8.3.1 本地服务和远程服务通信 Android系统中,服务的通信方式有两种: (1)本地服务通信:指应用程序内部的通信; (2)远程服务通信:指两个应用程序之间的通信; 无论使用哪一种通信,必须要以绑定的方式开启服务。 (1)本地服务通信 使用服务进行本地通信时,首先需要开发一个Service类,该类会提供一个IBinder onBind(Intent intent)方法,onBind()方法返回的IBinder对象会作为参数传递给ServiceConnection类中onServiceConnected(Component name,IBinder service)方法,这样访问者即可通过IBinder对象与Service进行通信。 8.3.1 本地服务和远程服务通信 本地服务通信原理 8.3.1 本地服务和远程服务通信 (2)远程服务通信 远程服务通信主要是为了实现不同应用程序之间的通信,远程服务通信是通过AIDL(Android Interface Definition Language)实现的,它是一种接口定义语言。开发人员定义的AIDL接口只是定义了进程之间的通信接口,服务端、客户端都需要使用Android SDK安装目录下的platform-tools子目录下的aidl.exe工具为接口提供实现。 8.3.2 本地服务和远程服务通信 (3)本地服务通信实例 (1)布局设计 (2)创建Service类的子类 8.3.2 本地服务和远程服务通信 public class MyService extends Service{ private int count;//充当服务的状态 private boolean stop;//确定是否停止count计数 //定义onBinder方法返回的对象 private MyBinder binder =new MyBinder(); public class MyBinder extends Binder{ public int getCount(){ //获取Service的运行状态 return count; } } public IBinder onBind(Intent intent) { Log.v(MyService,绑定服务成功); return binder; } public void onCreate() { super.onCreate(); Log.v(MyService,服务创建成功); //启动一条线程,动态修改count的状态值 new Thread(){ @Override public void run() { wh
文档评论(0)