资源描述
单击此处编辑母版文本样式,第二级,第三级,*,IC-MSP V1.0,单击此处编辑母版文本样式,第二级,第三级,*,IC-MSP V1.0,单击此处编辑母版文本样式,第二级,第三级,*,第六章,Service,应用实例,Android,课件,认识,Service,一、什么是,Service,从字面上理解,Service,的意义是“服务”,它是在后台运行,不可交互的。它和前面讲解的,Activity,级别差不多,但是它不能自己运行,需要通过一个,Activity,或者,Context,对象来调用,如,Context.startService,(),和,Context.bindService,(),两种方法来启动,Service,。如果在,Service,的,onCreate,(),或者,onStart,(),做一些很耗时的动作,最好是启动一个新线程来运行,Service,,因为如果,Service,是运行在主线程中,会影响到程序的,UI,操作或者阻塞主线程中的其他事情。,1,)什么时候需要,Service,这主要看应用的场景,例如,播放多媒体的时候用户启动了其他,Activity,,这个时候程序要在后台继续播放;如检测,SD,卡上下文变化;或者在后台记录用户的地理信息位置的改变等,一句话服务总是藏在后台。,一个直观的例子:一个正在从播放列表中播放歌曲的媒体播放器,在一个媒体播放器的应用中,应该会有多个,Activity,,让使用者可以选择歌曲并播放歌曲。然而音乐播放这个功能并没有对应的,Activity,,因为使用者会认为在导航到其他屏幕时音乐应该还在播放的。在这个例子中媒体播放器这个,Activity,会使用,Context.startService,(),来启动一个,Service,,从而可以在后台保持音乐播放。同时,系统也保持这个,Service,一直执行,直到,Service,运行结束,我们还可以进行暂停、重播等操作。,2,)如何使用,Service,这里以,Local Service,举例说明。,(,1,)创建布局文件,main.xml,,在其中的,LinearLayout,布局中放有,4,个按钮,分别用来进行,4,种操作。,使用,Service,(,2,)创建,TestServiceHolder,和,TestService,类,在,TestService,中继承,Service,类,并重写,onStart,(),、,onDestroy,(),等方法,例子中重要通过输入,LOG,的方式确定被调用的方法。另外其中用到,Notification,是为了明显表明,Service,存活的状态。,TestServiceHolder,类用来测试,Service,。,使用,Service,(,3,)在,AndroidManifest.xml,配置,Service,的生命周期,二、,Service,的生命周期,Service,的生命周期方法比,Activity,要少一些,只有,onCreate,(),、,onStart,(),、,onDestroy,(),、从前面的例子可以看以看到,有两种方式启动一个,Service,,他们对,Service,生命周期的影响是不一样的。,1,)通过,startService,启动,Service,启动的时候会经历生成,开始(,onCreate,-,onStart,)过程,,Service,停止的时候直接进入销毁过程(,onDestroy,)。而如果是调用者(,TestServiceHolder,)自己直接退出而没有调用,stopService,,,Service,会一直在后台运行。直到下次调用者(,TestServiceHolder,)再次启动起来,并明确调用,stopService,。,2,)通过,bindService,启动,提供,bindService,启动,Service,,其只会运行,onCreate,,这个时候将,TestServiceHolder,和,TestService,绑定在一起,如果,TestServiceHolder,退出了,,Service,就会调用,onUnbind,-,onDestroy,,所谓绑定在一起就共存亡了。,这里要明确,,不管用什么方法启动多少次,Service,,,Service,的,onCreate,方法只会被调用一次,无论多少次的启动或者绑定,,Service,只被创建一次,。如果先是绑定(,bind,)了,那么启动(,start,)的时候就直接运行,Service,的,onStart,方法,如果先是启动(,start,),那么绑定(,bind,)的时候就直接运行,onBind,方法。如果先绑定(,bind,)上了,就停止(,stop,)不掉了,也就是,stopService,不能用了,只能先,UnbindService,,再,stopService,,所以是先启动(,start,)还是先绑定(,bind,)行为是有区别的。,
展开阅读全文