第5章Android服务(Service)教学PPT文档格式.pptx
- 文档编号:13544565
- 上传时间:2022-10-11
- 格式:PPTX
- 页数:47
- 大小:604.50KB
第5章Android服务(Service)教学PPT文档格式.pptx
《第5章Android服务(Service)教学PPT文档格式.pptx》由会员分享,可在线阅读,更多相关《第5章Android服务(Service)教学PPT文档格式.pptx(47页珍藏版)》请在冰豆网上搜索。
例如通过网络上传,下载文件,操作一旦完成,服务应该自动销毁。
通过Context的bindService()绑定Service,绑定后Service就和调用bindService的组件同生共死了。
也就是说当调用bindService()的组件销毁了,那么它绑定的Service也要跟着被结束,当然期间也可以调用unbindservice()让Service提前结束。
注意:
一个服务可以与多个组件绑定,只有当所有的组件都与之解绑后,该服务才会被销毁。
5.1.2启动Service的两种方式,以上两种方法可以混合使用,即一个Service既可以启动也可以绑定,只需要同时实现onstartedCommand()(用于启动)和onBind()(用于绑定)方法,那么只有调用stopService(),并且调用unbindService()方法后,该Service才会被销毁。
服务运行在它所在进程的主线程,服务并没有创建它自己的线程,也没有运行在一个独立的进程上(单独指定的除外),这意味着,如果你的服务做一些消耗CPU或者阻塞的操作,你应该在服务中创建一个新的线程去处理。
通过使用独立的线程,你就会降低程序出现ANR(ApplicationNoResponse程序没有响应)的风险,程序的主线程仍然可以保持与用户的交互。
5.1.3Service中常用方法,与开发其它Android组件类似,开发Service组件需要先开发一个Service子类,该类需继承系统提供的Service类,系统中Service类包含的方法主要有:
abstractIBinderonBind(Intentintent):
该方法是一个抽象方法,所有Service子类必须实现该方法。
该方法将返回一个IBinder对象,应用程序可通过该对象与Service组件通信;
voidonCreate():
当Service第一次被创建时,将立即回调该方法;
voidonDestroy():
当Service被关闭之前,将回调该方法;
voidonstartCommand(Intentintent,intflags,intstartId):
每次客户端调用startService(Intentintent)方法启动该Service时都会回调onstartCommand()方法;
booleanonUnbind(Intentintent):
当该Service上绑定的所有客户端都断开连接时将会回调该方法。
开发Service组件需要先开发一个Service子类,然后在AndroidManifest.xml文件中配置该Service,配置时可通过元素指定它可被哪些Intent启动。
在AndroidManifest.xml文件中配置Service:
Action中的值一定要与程序中创建的Intent的Action的值一致,程序就是根据Action的值来查找相应的Service从而启动它。
5.1.3Service中常用方法,通过Context的startService()启动Service后,访问者与Service之间没有关联,该Service将一直在后台执行,即使调用startService()的进程结束了,Service仍然还存在,直到有进程调用stopService(),或者Service自己自杀(stopSelf())。
这种情况下,Service与访问者之间无法进行通信、数据交换。
通过Context的bindService()绑定Service后,Service就和调用bindService()的组件同生共死了,也就是说当调用bindService()的组件销毁了,那么它绑定的Service也要跟着被结束。
5.1.2Service中常用方法简介,案例:
FirstService,privatestaticfinalStringTAG=MyService;
publicIBinderonBind(Intentarg0)Log.i(TAG,MyServiceonBindinvoked!
);
returnmyBinder;
publicvoidonCreate(),Log.i(TAG,MyServiceonCreateinvoked!
super.onCreate();
publicvoidonDestroy()Log.i(TAG,MyServiceonDestroyinvoked!
super.onDestroy();
quit=true;
publicintonstartCommand(Intentintent,intflags,intstartId)Log.i(TAG,MyServiceonstartCommandinvoked!
returnsuper.onstartCommand(intent,flags,startId);
定义的Service子类必须实现onBind()方法,然后还需在AndroidManifest.xml文件中对该Service子类进行配置,配置时可通过元素指定它可被哪些Intent启动。
下面具体来创建一个Service子类并对它进行配置,代码如下。
程序清单:
/FirstService/src/iet/jxufe/cn/android/MyService.javapublicclassMyServiceextendsService自定义服务类,重写OnBind方法,重写OnCreate方法,重写OnDestory方法,重写onstartCommand方法,案例:
FirstService,在上述代码中,创建了自定义的MyService类,该类继承了Android.app.Service类,并重写了onBind(),onCreate(),onstartCommand(),onDestory等方法,在每个方法中,通过LOG语句测试和查看该方法是否被调用。
定义完Service之后,还需在项目的AndroidManifest.xml文件中配置该Service,增加配置片段如下。
虽然目前MyService已经创建并注册了,但系统仍然不会启动MyService,要想启动这个服务。
必须显示地调用startService()方法。
如果想停止服务,需要显示地调用stopService()方法,下面代码中,使用Activity作为Service的启动者,分别定义了启动Service和关闭Service两个按钮,并为它们添加了事件处理。
/FirstService/src/iet/jxufe/cn/android/MainActivity.javapublicclassMainActivityextendsActivitypublicvoidonCreate(BundlesavedInstanceState)super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
start=(Button)findViewById(R.id.start);
stop=(Button)findViewById(R.id.stop);
finalIntentintent=newIntent();
intent.setAction(.android.MyService);
start.setonclickListener(newonclickListener()publicvoidonclick(Viewv),startService(intent);
stop.setonclickListener(newonclickListener()publicvoidonclick(Viewv)stopService(intent);
);
案例:
FirstService,案例:
FirstService,运行本节的例子后,第一次单击【启动Service】按钮后,在DDMS视图下的LogCat视图有如下图所示的输出。
然后单击【关闭Service】按钮,LogCat视图有如下图所示的输出。
下面按如下的单击顺序,重新测试一下本例。
【启动Service】【启动Service】【启动Service】【停止Service】测试完程序,查看LogCat控制台输出信息如下图所示。
系统只在第一次单击【启动Service】按钮时调用onCreate()和onstartCommand()方法,再单击该按钮时,系统只会调用onstartCommand()方法,而不会重复调用onCreate()方法。
5.1.4绑定Service过程,Context的bindService()方法的完整方法签名为:
bindService(Intentservice,ServiceConnectionconn,intflags),该方法的三个参数解释如下:
service:
该参数表示与服务类相关联的Intent对象,用于指定所绑定的Service应该符合哪些条件;
conn:
该参数是一个ServiceConnection对象,该对象用于监听访问者与Service之间的连接情况。
当访问者与Service之间连接成功时,将回调该ServiceConnection对象的onServiceConnected(ComponentNamename,IBinderservice)方法;
当访问者与Service之间断开连接时将回调该ServiceConnection对象的onServiceDisconnected(ComponentNamename)方法。
flags:
指定绑定时是否自动创建Service(如果Service还未创建)。
该参数可指定BIND_AUTO_CREATE(自动创建)。
当开发Service类时,该Service类必须提供一个onBind()方法,在绑定本地Service的情况下,onBind()方法所返回的IBinder对象将会传给ServiceConnection对象里onServiceConnected(ComponentNamename,IBinderservice)方法的service参数,这样访问者就可以通过IBinder对象与Service进行通信。
实际开发时通常会采用继承Binder(IBinder的实现类)的方式实现自己的IBinder对象。
5.1.4绑定Service过程,5.1.4绑定Service案例,在上一个案例中,添加两个按钮,一个用于绑定服务,一个用于解绑,然后分别为其添加事件处理。
在绑定服务时,需要传递一个S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Android 服务 Service 教学