Android Service的总结,service, bindservice,intentservice

来源:互联网 发布:dd wrt设置网络打印机 编辑:程序博客网 时间:2024/06/11 06:15

这篇应该在周5就写的,奈何人吃五谷杂粮,就要被俗事缠身,周5先是为了办手机实名,跑了三家营业厅,前2家因为我不记得密码了,不能办,最后一家可以办但是他们要维护系统,所以也给我办不了,我去,我这么一良好市民,想办个实名怎么这么难呢。再加上小假结束我又得了肠胃炎,时好时坏,周5早上又被折磨了下,整个人都不好。本来也不想写这篇的,道理基本都懂,但是好记性不如烂笔头,还是记下吧,好了啰嗦这么多,现在写正文了.

Service:就是被定义为执行long-running operation的,在后台运行没有界面,话虽这么说,但是很耗时的操作还是不要放在Service里面,这是因为Service不是独立的进程,也不是独立的线程,它是依赖于应用程序的主线程的,Service运行在UI Thread里面的,耗时操作都懂的会block UI ,使界面没有响应,这里有两个办法解决,1.多线程就是在Service里面另起一个线程 2使用IntentService,主要用来异步请求,它是Service的一个子类,但是自己创建了一个独立于主线程的work thread,看过它的源码就知道,它其实是自己新建了HandlerThread,有自己的loop和消息对列,启动IntentService以后,会把Intent一个一个加到这个独立的消息队列里面,然后通过onHandleIntent方法在一个一个执行。这两个解决方案比起来,显然第一个并发性好,后一个因为要一个一个顺序执行,一个Intent在执行的时候不能打断,如果前一个执行很长时间,就会block后面的任务了

Service有两种状态:

1.一个是通过StartService启动,普通Service,生命周期就是onCreate-onStartCommand-onDestory,尽管多次调用启动Service, onCreate方法只被调用一次,但是onStartCommand会被调用多次,还有它和调用者无关,即使调用它的Activity销毁了,它还能正常在后台运行,还有它不能自己停止,不能自己停止,不能自己停止,重要的事情说3遍,必须通过手动调用方法stopService(),stopSelf()停止或者其它程序把它终止,不然这个Service会一直运行,这个IntentService不一样,IntentService所有intent执行完了,就会自己Destory掉。

2.通过BindService,为什么要有bindService,这是因为虽然Service运行在后台,但是我们有时候还是要和它交流的,所以这里就采用CS模式,bindService可以看成是个服务器端,我们还是可以给它发个request得到个response什么的,至于怎么通讯,基本就靠AIDS(Android 接口定义语言)这里不深入了。生命周期就是onCreate-onBind-onUnBind-onDestory,onBind也只调用一次,它和调用者有关,当所有的调用者都unbind的时候,这个service就销毁了。

0 0
原创粉丝点击