Service_Android四大组件之一

<span style="font-size:24px;">1.Service是什么</span>
<span style="font-size:18px;">Service是Android的四大组件之一,即Android系统的服务(<span style="color:#993399;">不是一个线程,是主程序的一部分</span>),与Activity不同,它是不能与用户交互的,不能自己启动的,需要调用<span style="color:#ff6666;">Context.startService()来启动</span>,运行后台,如果我们退出应用时,Service进程并没有结束,它仍然在后台行。比如我们播放音乐的时候,有可能想边听音乐边干些其他事情,当我们退出播放音乐的应用,如果不用Service,我们就听不到歌了,所以这时候就得用到Service了。</span>

<span style="font-size:24px;">2.Service生命周期</span>
<span style="font-size:18px;color:#33cc00;">①onCreate() 创建Service
②onStart(Intent intent, int startId) 启动Service
③onDestroy() 销毁Service
④onBind() 返回一个IBinder接口对象给Service</span>
 
<span style="font-size:24px;">3.启动和停止Service</span>
<span style="font-size:18px;"><span style="color:#009900;">①启动:startService(Intent intent)来启动Service,这时Service会调用自身的onCreate()方法(该Service未创建),接着调用onStart()方法。</span>
<span style="color:#3366ff;">②停止:stopService(Intent intent)来停止Service,这时Service会调用自身的onDestory()方法。</span></span>

<span style="font-size:24px;">4.绑定Service</span>
<span style="font-size:18px;">调用<span style="color:#006600;">bindService(Intent service, ServiceConnection conn, int flags)</span>来绑定一个Service,这时Service会调用自身的onCreate()方法(该Service未创建),接着调用onBind()方法返回客户端一个IBinder接口对象。(注意:如果返回null,ServiceConnection对象的方法将不会被调用)</span>
<span style="font-size:18px;">
参数①service:Intent对象 。
参数②conn:ServiceConnection对象,实现其onServiceConnected()和onServiceDisconnected()在连接成功和断开连接时处理。
参数③flags:Service创建的方式,一般用Service.BIND_AUTO_CREATE表示绑定时自动创建</span>
<span style="font-size:18px;">
在注册服务的时候,为了将service纳入编译系统,<span style="color:#cc0000;">必须在AndroidMainfest.xml中对Service进行显式声明</span>。</span>
<span style="font-size:18px;">
2.<span style="color:#cc9933;">计算量较大的又不是UI层的工作的话,可以选择放置在Service中进行工作。</span></span>
<span style="font-size:18px;">
3.通过开发文档你会发现,Android中的Service与宿主(调用者)在同一线程,而不是专门起一条线程,这意味着,如果你的服务要CPU密集型操作(如:MP3播放)或则阻塞操作(如网络)时,必须产生它自己的线程来完成这个工作,<span style="color:#cc0000;">否则会造成线程阻塞</span>。在Service的子类里面,IntentService类服务可以作为一个标准的实施,它的工作有其自己的线程。</span>
<span style="font-size:18px;">
4.<span style="color:#cc0000;">如果在使用Service的时候又使用了广播接收器配合工作,广播如果是动态注册的话,在服务停止的时候记得调用unregisterReceiver(receiver);这个方法来注销掉接收器</span></span>
<span style="font-size:18px;">
1)<span style="color:#3333ff;">Context.startService():Service会经历onCreate -> onStart(如果Service还没有运行,则android先调用onCreate()然后调用onStart();如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次)</span>;</span>
<span style="font-size:18px;">
stopService的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService的话,Service会一直在后台运行。该Service的调用者再启动起来后可以通过stopService关闭Service。 注意,多次调用Context.startservice()不会嵌套(即使会有相应的onStart()方法被调用),所以无论同一个服务被启动了多少次,一旦调用Context.stopService()或者stopSelf(),他都会被停止。补充说明:传递给startService()的Intent对象会传递给onStart()方法。调用顺序为:onCreate --> onStart(可多次调用) --> onDestroy。
(2)<span style="color:#009900;">Context.bindService()</span>:Service会经历<span style="color:#009900;">onCreate() -> onBind()</span>,onBind将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。这个时候把调用者(Context,例如Activity)会和Service绑定在一起,<span style="color:#cc6600;">Context退出了,Srevice就会调用onUnbind -> onDestroyed相应退出,所谓绑定在一起就共存亡了。</span></span>
<span style="font-size:18px;">
<span style="color:#ff0000;">补充说明</span>:传递给bindService()的Intent对象会传递给onBind(),传递给unbindService()的Intent对象会传递给onUnbind()方法。调用顺序为:onCreate --> onBind(只一次,不可多次绑定) --> onUnbind --> onDestory。</span>
<span style="font-size:18px;">
(3)注意事项:<span style="color:#ff0000;">在Service每一次的开启关闭过程中,只有onStart可被多次调用(通过多次startService调用),其他onCreate,onBind,onUnbind,onDestory在一个生命周期中只能被调用一次。还有一点,目前我没有遇到过需要startService和bindService交互使用的情况(我认为不会有这种需求),所以不必去考虑交互的问题,待遇到时再考虑不迟</span>。</span>
<span style="font-size:18px;">
(4)<span style="color:#ff0000;">BroadcastReceiver只能通过startService启动Service,因为广播本身生命周期很短,bind的话没有意义</span>
</span>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值