Service详解(一):理论篇

Service生命周期.png

本文重点

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

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

Service的onStartCommand方法的返回值及其区别?

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

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

  • 启动
    多次调用startService():onCreate()方法只会调用一次,onStartCommand()会多次调用;
    多次调用bindService():onCreate()方法只会调用一次,onBind()方法只会执行一次;
  • 解绑
    startService()无论调用多少次,对stopService()方法或者stopSelf方法()的单个调用都会停止该服务;
    unbindService()方法的调用解绑unbindService()方法

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

Service的真正销毁是在调用onDestroy()方法之后,在销毁服务之前需要对已经启动的服务进行解绑(并不需要考虑顺序)

3.Service的onStartCommand方法的返回值及其区别?

 /**
  * 为了兼容版本,在Service被kill后,并不保证onStartCommand
  * 方法会被再一次调用
  */
  public static final int START_STICKY_COMPATIBILITY = 0;
 /**
  * service被kill后,保留启动状态,但不保存intent,之后系统会尝试
  * 重启该service,并重新回调onStartCommand。如果没有其他start命令。Intent为null。
  * 因此需要对onStartCommand方法中的intent值判空
  */
  public static final int START_STICKY = 1;
 /**
  * 常规操作。如果在执行完onStartCommand方法后,服务被异常kill掉,系统不会自动重启该服务。
  */
  public static final int START_NOT_STICKY = 2;
 /**
  * service被kill后,系统会组织一次service重启(除非那之前调用了stopSelf方法),被杀死前
  * 最后一次传递的intent将重新执行,该flag不会传递空intent。
  */
  public static final int START_REDELIVER_INTENT = 3;

这里简单总结一下
START_STICKY:服务明确需要管理并长期运行;不需要记住服务被杀死时的状态;example:播放音乐。
START_NOT_STICKY:服务明确不需要管理;服务定期运行并自行停止;example:闹钟服务或者服务器数据轮询。
START_REDELIVER_INTENT:服务明确需要管理;重新获取服务被杀死前的状态;example:文件下载。

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

Service默认是在主线程中运行。如果Service要做CPU密集型或阻塞操作,它应该在子线程中完成操作(IntentService类有自己的线程,可以完成耗时的操作)。否则会产生ANR.

本文参考自

Android开发者平台

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 【Android Service】 Service 简介(★★★) 很多情况下,一些与用户很少需要产生交互的应用程...
    Rtia阅读 3,171评论 1 21
  • 上篇我们讲解了Android中的5中等级的进程,分别是:前台进程、可见进程、服务进程、后台进程、空进程。系统会按照...
    徐爱卿阅读 3,889评论 6 33
  • 一、Service简介 Service是Android程序中四大基础组件之一,是在后台运行的组件。 Service...
    提升即效率阅读 914评论 0 1
  • 版权声明:本文为博主原创文章,未经博主允许不得转载 PS:转载请注明出处作者: TigerChain地址: htt...
    TigerChain阅读 774评论 0 3
  • 武艺者 在故事中,泛指拥有特异器官“刭脉”的人,当中再细分为负责战斗的“武艺者”(分为遗传型和突变型)和负责战斗情...
    空白_7阅读 1,435评论 0 0