Service

作者: yuansip | 来源:发表于2016-10-21 16:00 被阅读0次

    Service是标准应用组件之一,适用于长期运行,且无需用户交互的任务;或者提供可供其他应用使用的功能

    类型

    1. Normal Service
    2. IntentService
      IntentService是一种处理通过Intent传递的异步请求的服务,Client通过startService(Intent)发起请求,如果对应服务已经启动,则该请求会放到请求队列中;如果对应服务没有启动,则先启动服务,再处理请求。请求是在onHandleIntent(Intent)函数中处理,该函数运行在一个由IntentService自动启动的worker thread中。请求队列中的所有请求都是在这个相同的thread中顺序处理。当所有请求都处理完后,IntentService会自行退出。

    启动方式

    1. startService(Intent)
      Intent必须是显式的,包含具体的class name或者服务所在的包名。用这种方式启动的服务必须调用stopSelf或者stopService才能正常退出。
    2. bindService(Intent)
      Intent可以是显式的;也可以是隐式的,且匹配服务在manifest中声明的intent filter。用这种方式启动的服务,只有第一次绑定,服务启动时,会执行onBind回调,之后再次绑定服务,系统会直接返回第一次绑定时onBind返回的IBinder。绑定服务的Client销毁后系统会自动unBind,但推荐Client不需要服务时就立刻调用unBind。当所有的Client都unBind之后,服务会自行退出。

    交互方式

    1. Intent
      适用于进程间和进程内通信,用于启动或绑定服务
    2. Binder
      进程内通信时,可以调用Service的接口;进程间通信时,可以利用IBinder.transactBinder.onTransact传递数据
    3. Messenger
      适用于进程间通信,但只能是Client单向向Service发送消息。
    4. AIDL
      使用于进程间通信,Client可以同步或异步(keyword in aidl: oneway)调用Service的接口。

    相关文章

      网友评论

          本文标题:Service

          本文链接:https://www.haomeiwen.com/subject/ljzquttx.html