知识星球

#Android学习计划第二周 清晰地理解Service

2017-11-26  本文已影响0人  Rayhoo

1.Service的start和bind状态有什么区别?

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

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

 3.1 START_STICKY:
系统在调用完onStartCommand()方法后,如果当前服务被终止了,系统会使该服务保持在启动状态,不过它不会保留之前传递的Intent对象。但是由于它保持启动状态,随后系统会尝试重新创建service,但之前的Intent对象没有被保存。在这个情况下,如果期间没有任何启动命令被传递到Service,那么参数Intent将为null。因此使用START_STICKY作为返回值,适用于不执行命令的媒体播放器(或类似的服务),它只是无限期的运行着并等待工作的到来.
 
 3.2 START_NOT_STICKY:
系统在调用完onStartCommand方法后,如果当前服务被终止了并且在此期间没有任何启动命令被传递到Service,那么系统将是使当前服务退出启动状态,并且除非重新调用Context.startService(Intent),否则不会重新被创建(即不会重新调用onCreate方法)。因为当前服务退出了启动状态,所以除非在此期间启动命令被传递到Service,否则也不会调用。这是最安全的选项,用来避免在不需要的时候运行你的服务。onStartCommand方法。
 
 3.3 START_REDELIVER_INTENT:
重传Intent。使用这个返回值时,如果在执行完onStartCommand后,服务被异常kill掉,系统会自动重启该服务,并将Intent的值传入。
 
 3.4 START_STICKY_COMPATIBILITY:
START_STICKY的兼容版本,但不保证服务被kill后一定能重启。

4. Service的生命周期方法onCreate、onStart、onBind等运行在哪个线程?

上一篇 下一篇

猜你喜欢

热点阅读