Service介绍

1、Service的概念及应用场景
   service是一个没有用户界面的后台运行执行耗时操作的应用组件。
   其他应用程序组件能够启动service,并且当用户切换到另外的应用场景
   service将保持后台运行。另外,如果一个组件能够绑定到一个service,
   那么就可以与之交互。例如:(IPC),一个service可能会处理网络操作,
   或者比如播放音乐,操作文件IO,或者操作ContentProvider,所有这些耗时
   操作均需要在service中执行。
   
  2、Service的分类
   类结构
   java.lang.Object
    android.content.Context
     android.content.ContextWrapper
      android.app.Service
       ……SubClass
   直接子类:
    IntentService:它作为Service的直接子类,主要用于处理异步耗时
    操作,所有的工作都运行在一个子线程中(HandleThread),并且
    具有执行完任务,自动onDestory()。
    MediaRouteProvideService:它主要用于SD卡的卸载和挂载以及扫描。
   
   服务范围:
    本地服务:该服务主要运行于主进程上,如果主进程被kill,那么这个服务也挂了。
    远程服务:该服务可以独立的开启一个进程,会占用一定资源,可以进行夸进程交互,AIDL。
    

   运行类别:
    前台服务:前台服务需要调用startForeground()来标记此服务属于前台服务。
    后台服务:在后台运行服务。

  3、Service的生命周期
   Service is started by startService():
    onCreate()
    onStart()(onStartCommond)
    (Service is Running)
    (The Service is stopped(no callback))
    onDestory()
    (The Service is shutdown)

   Service is started by bindService():
    onCreate()
    onBind()
    (Client interacts with the service.)
    onUnbind() → onRebind()
    onDestory()
    (The service is shutdown)
  4、Service的注册
   在AndroidManiFest.xml中的标签中进行注册.
   
  5、Service的启动
   1、context.startService();
   2、context.bindService();

  6、粘性服务于非粘性服务
   1、START_STICKY:粘性服务,如果当前Service在执行完成onStartCommond方法并且返回该变量的值
   时,服务进程被强行kill掉,那么系统会尝试重新启动该服务。
   2、START_NOT_STICKY:非粘性服务,如果当前Service在执行完onStartCommond方法之后,返回该变量
   的值后,被意外kill掉,那么系统并不会尝试重新启动该服务。
   3、START_REDELIVER_INTENT:重传Intent,使用这个返回值,如果在执行完onStartCommond方法后,
   程序被意外kill掉,那么会重新启动该服务,并将Intent的值传入。
   4、START_STICKY_COMPATIBILITY:这个值是START_STICKY这个值的兼容模式。

 注意事项:

service在与activity绑定的时候如果需要进行传递数据,需要自定义一个binder把需要传递的数据定义在里面,进行传递,并且service的onBind()方法必须返回那个自定义的binder的实例化,否则就不能把要传递的数据传递过去,如果返回值为空则不会执行serviceConnection里面的方法。

 

 

 

 

 

 

你可能感兴趣的:(Service介绍)