博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
理解Service
阅读量:6377 次
发布时间:2019-06-23

本文共 1375 字,大约阅读时间需要 4 分钟。

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。

转载地址:http://jnxqa.baihongyu.com/

你可能感兴趣的文章
根据物流号查看物流信息
查看>>
jsp设置MIME类型
查看>>
python模拟自动登录网站(urllib2)
查看>>
Java 对文件的操作
查看>>
洛谷 题解 P3627 【[APIO2009]抢掠计划】
查看>>
springboot传入json和文件_SpringBoot系列教程22-整合SpringMVC之HttpMessageConverters
查看>>
不礼让行人怎么抓拍的_张家川公安交警持续曝光机动车不礼让行人【第24期】...
查看>>
用pythonturtle写名字_去年爆款新生儿名字,家长自以为起的不错,却有“棺材”的意思...
查看>>
句子分类_语法微课句子的分类+文本讲解
查看>>
显示提示_体检报告显示:“转氨酶”升高!提示身体可能出现了这些健康问题...
查看>>
图形化分析工具_推荐一款基于小米 soar 的开源 sql 分析与优化的 web 图形化工具...
查看>>
485 工控机 接线方式_RS485温湿度传感器的接线方式及注意事项
查看>>
u3d游戏开发视频潭州_unity3d教程视频-unity3d教程中文零基础入门/u3d游戏开发/特效案例/项目实战V2.0 最新版 - 极光站...
查看>>
c++区块链实例_cpp 区块链模拟示例(二)工程代码解析
查看>>
java 接口的本质_Java基本概念:接口
查看>>
java死锁的解决_java中常见的死锁以及解决方法代码
查看>>
java菜单栏不下拉_我java代码中的下拉列表设好后为什么无法下拉?
查看>>
java传递引用类型的实质_java的引用类型以及值传递
查看>>
java策略模式使用场景,Java设计模式—策略模式
查看>>
RHEL6.3实现基于加密的用户认证验证访问
查看>>