理解Service

作者: 玉堃 | 来源:发表于2018-08-28 16:50 被阅读16次

Service的start和bind有什么区别?

Service分为两种工作状态,一种是启动状态,主要用于执行后台计算;另一种是绑定状态,主要用于其它组件和Service的交互。Service的这两种状态是可以共存的。
start启动的Service,Service有独立的生命周期,不依赖该组件;多次调用start方法,会重复调用onStartCommand方法;start启动的Service,必须通过stopService或者stopSelf来停止Service(IntentService会自动调用stopSelf方法)。
多次调用bind方法,只会调用一次onBind方法。bind绑定的Service,Service依赖于这些组件,这些组件全部销毁后,Service也随之销毁。

同一个Service,先startService,然后再bindService,如何把它停止掉?

不论被startService调用几次,只需stopService(或stopSelf方法)一次;调用n次bindService方法,必须调用n次unbindService方法。需要注意的是,若同一个组件多次bind一个Service,不需要多次调用unbind,只需要一次。
因此,需要调用一次 stopService(或stopSelf方法)和n次unbindService方法,执行顺序没有要求,最后一个 stopService或者unbindService方法会导致Service的onDestroy执行。

你有注意到 Service的onStartCommand方法的返回值吗?不同的返回值有什么区别?

一共有如下四种返回值:

  1. 为了兼容版本,在Service被杀死后,并不保证onStartCommand会被再一次调用。
public static final START_STICKY_COMPATIBILITY = 0
  1. Service被杀死后,保留启动状态,但不保存intent,之后系统会尝试重启该Service,并重新回调onStartCommand方法。
    如果接下来没有其它start命令,intent会为null。因此,要注意onStartCommand对intent的非空判断。
public static final int START_STICKY =1
  1. 常规操作,除非死之前还有组件调用startService,否则系统不会保留启动状态并重启该Service。
public static final int START_NOT_ STICKY = 2;
  1. Service被杀死后,系统将会组织一次Service重启(除非在那之前调用stopSelf()方法),被杀死前最后一次传递的intent将重新被执,该flag将不会传递空intent。
public static final in START_REDELIVER_INTENT = 3;

Service的生命周期方法 onCreateonStartonBind等运行在哪个线程?

Service默认是运行在主线程的,其生命周期方法也是运行在主线程。因此,如果想要在Service中执行耗时操作,必须另起线程(或者使用IntentService),否则可能会产生ANR。

相关文章

  • 理解Service

    Service的start和bind有什么区别? Service分为两种工作状态,一种是启动状态,主要用于执行后台...

  • 理解Service

    话题:清晰地理解Service。 1、Service的start和bind状态有什么区别? (1)命令式启动服务:...

  • service理解

    关于service的理解 经过start启动的service由独立的生命周期,不依赖该组件。多次调用start会多...

  • rest与webservice

    关于Web Service和Rest Service的理解

  • Spring自动织入的理解

    理解Bean注入 1.1 定义服务Service 1.2 在服务中引入Service 1.3 编写注入方法 理解A...

  • K8S 实战(十一)| Service 的 Service:In

    前言 ingress 可以理解为 Service 的 Service,即在现有 Service 的前面再搭建一层 ...

  • JavaScript是如何工作的:Service Worker的

    摘要: 理解Service Worker。 原文:JavaScript 是如何工作的:Service Worker...

  • 清晰理解service

    service的start和bind有什么区别? start启动的service,service有独立的生命周期,...

  • 清楚理解Service

    1.Service的start和bind状态有什么区别? 2.同一个Service,先startService,然...

  • PWA之Service work

    原文 博客原文 大纲 1、Service Workers: PWA 的关键2、理解 Service Workers...

网友评论

    本文标题:理解Service

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