Android的Service

来源:互联网 发布:win7网络设置ip地址 编辑:程序博客网 时间:2024/05/17 15:01
  Service的特点是没有界面,不受用户打扰,概念上类似Linux的Daemon,在摆脱了与终端的联系之后,就能够长期在后台运行了。(当然,本质上Service只是一个对象和一些代码片段,和Activity一样,Service缺省运行在进程的主线程中,所以需要注意的是,如果Service有耗时操作还是需要创建另外的线程来完成的)


  由于没有界面,相比Activity,Service因而简单了不少,不用布局,也不用处理用户交互,只需要处理好LifeCycle就行了。Service的LifeCycle根据控制方式可分为两种。

  • 一种是用startService()/stopService()控制Service的启停。
  • 一种是用bindService()/unbindService()连接断开Service。在连接上Service时,可以调用Service提供的方法。


  使用连接断开Service的Bind模式有几种实现方式:

  1. 在同一个进程内,简单多了,可以直接访问对象,就可以直接进行强制类型转换。
  2. 不在同一个进程中,可以考虑使用Messenger。Messenger的底层其实也是用AIDL(Android Interface Definition Language)来实现,只不过封装好后,开发者不用直接和AIDL打交道,直接使用Messenger的接口就行了。当然队列化以后,Service不能同时处理多个请求,只能一个处理完后再处理下一个,这点和IntentService相似。
  3. 使用AIDL就能够同时处理多个请求了,AIDL比较复杂,不过好在底层的处理都由编译器处理了,因而开发者要做的其实只是自定义接口和实现接口,然后依葫芦画瓢按固定的形式把通道搭起来。

  除了自己实现Service,系统提供了一些有用的Service,当然都是Bind模式的,开发者可以通过Context.getSystemService()获取相应的对象(这些对象内封装了访问Service的接口),然后访问Service。

原创粉丝点击