首先看下其生命周期的区别:

生命周期: onCreate → startCommand → onDestroy

onCreate → onBind→onUnBind→ onDestroy

静态绑定对应着startService;动态绑定对应着bindService,静态有自己独立的生命周期,动态会依附activity等组件的生命周期。

1、生命周期上的区别

  • 执行startService时,Service会经历onCreate->onStartCommand。当执行stopService时,直接调用onDestroy方法。调用者如果没有stopServiceService会一直在后台运行,下次调用者再起来仍然可以stopService

  • 执行bindService时,Service会经历onCreate->onBind。这个时候调用者和Service绑定在一起。调用者调用unbindService方法或者调用者Context不存在了(如Activityfinish了),Service就会调用onUnbind->onDestroy。这里所谓的绑定在一起就是说两者共存亡了。

注意:ServiceonCreate的方法只会被调用一次,
就是你无论多少次的startServicebindServiceService只被创建一次。
如果先是bind了,那么start的时候就直接运行ServiceonStartCommand方法,
如果先是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,只能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的。

2、调用者如何获取绑定后的Service的方法
onBind回调方法将返回给客户端一个IBinder接口实例,IBinder允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。我们需要IBinder对象返回具体的Service对象才能操作,所以说具体的Service对象必须首先实现Binder对象。

3、既使用startService又使用bindService的情况

那么,什么情况下既使用startService,又使用bindService呢?

如果你只是想要启动一个后台服务长期进行某项任务,那么使用startService便可以了。如果你还想要与正在运行的Service取得联系,那么有两种方法:一种是使用broadcast,另一种是使用bindService。前者的缺点是如果交流较为频繁,容易造成性能上的问题,而后者则没有这些问题。因此,这种情况就需要startService和bindService一起使用了。

另外,如果你的服务只是公开一个远程接口,供连接上的客户端(Android的Service是C/S架构)远程调用执行方法,这个时候你可以不让服务一开始就运行,而只是bindService,这样在第一次bindService的时候才会创建服务的实例运行它,这会节约很多系统资源,特别是如果你的服务是远程服务,那么效果会越明显(当然在Servcie创建的是偶会花去一定时间,这点需要注意)。


Thanks

  1. https://www.cnblogs.com/sesexxoo/p/6189932.html
  2. https://my.oschina.net/tingzi/blog/376545

startService和bindService的区别相关推荐

  1. Android之startService与bindService的区别

    Android执行Service有两种方法,一种是startService,一种是bindService.下面让我们一起来聊一聊这两种执行Service方法的区别. 1.生命周期上的区别 执行star ...

  2. Android之startService()和bindService()区别

    Android之startService()和bindService()区别 1. 生命周期: 执行startService时,Service会经历onCreate->onStartComman ...

  3. [转]安卓开发startservice 和bindservice详解

    原文 作者:aikongmeng 来源:安卓中文网 博主暗表:搜到此文,终于为我解惑,bindService并不会真正启动service,不会调用onStartCommand!还需要再bind之前st ...

  4. 深入理解Android的startservice和bindservice

    一.首先,让我们确认下什么是service?          service就是android系统中的服务,它有这么几个特点:它无法与用户直接进行交互.它必须由用户或者其他程序显式的启动.它的优先级 ...

  5. startService与bindService

    2011-12-19 21:20 187人阅读 评论(0) 收藏 举报 Service的生命周期 Service的生命周期方法比Activity少一些,只有onCreate, onStart, onD ...

  6. Android startService和bindService混合使用、以及前台服务;

    Service简单来说就是一个看不见的Activity,在后台默默运行: 可以混合开启Service,无论先startService还是bindService: startService: Inten ...

  7. Android开发面试题Service之startService和bindService之间的区别

    我们从生命周期来看: startService启动service会走=>onCreate和onStartCommand bindService启动service会走=>onCreate和o ...

  8. startService()和bindService()区别

    1.从生命周期来看 startService()会调用service的onCreate().onStartCommand(),调用stopService()后就执行service的onDestroy( ...

  9. Service 定义(startService、bindService、IntentService)

    Service: 是Android中实现程序后台运行的解决方案. 定义为服务 Service默认并不会运行在子线程中,它也不会运行在一个独立的进程中,它同样执行在UI线程中,因此,不要在Service ...

最新文章

  1. MasterPage.master文件
  2. A股融资融券余额是什么意思?
  3. 2021年春季学期-信号与系统-第二次作业参考答案-第八小题
  4. JQuery中的元素选择器
  5. 从DevOps到Cloud Native,应用上云姿势全解锁
  6. 遍历 Dictionary,你会几种方式?
  7. iSensor APP 之 摄像头调试 OV3640 OV2640 MT9d112
  8. edge android apk下载地址,edge app下载-edge完整版v7.2.0 安卓版 - 极光下载站
  9. mybatis plus springboot test_跟我学Springboot开发后端管理系统3:Mybatis-Plus实战2
  10. AssetBundle资源冗余检测
  11. HTML中的img标签无法显示图片的解决方案
  12. 如何学习 COMSOL 多物理场仿真软件?必备教程
  13. DM运维踩坑实践总结
  14. 我的Unity3d学习总结
  15. linux之域名更改
  16. scratch二级考纲
  17. GC详解---JVM(三)
  18. 常见排序算法及其对应的时间复杂度、空间复杂度
  19. Jmeter接口压力测试(先登录再测接口)
  20. K-means与高斯混合模型

热门文章

  1. 继续完善SandCastle
  2. jQuery超酷字体显示效果
  3. 利用设备上下线状态数据流转到TSDB的方法实现监测设备历史在线情况
  4. Autowire 和 @Resource 的区别
  5. Android性能专项测试之GPU Monitor
  6. Mysql查询语句大全
  7. 办公人员使用计算机的管理办法,办公区网络和办公电脑管理办法
  8. 音视频开发者都用什么工具|15款开发工具使用指南
  9. 日本展出高仿生女性机器人Asuna
  10. 关于CAN通信速率设置