2011-12-19 21:20 187人阅读 评论(0) 收藏 举报

Service的生命周期 Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy 
我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的。

1 通过startService 
    Service会经历 onCreate -> onStart 
   stopService的时候直接onDestroy

如果是调用者(TestServiceHolder)自己直接退出而没有调用stopService的 
   话,Service会一直在后台运行。 
   下次TestServiceHolder再起来可以stopService。

2 通过bindService    
    Service只会运行onCreate, 这个时候 TestServiceHolder 和TestService绑定在一起

TestServiceHolder 退出了,Srevice就会调用onUnbind->onDestroyed 
   所谓绑定在一起就共存亡了。

那有同学问了,要是这几个方法交织在一起的话,会出现什么情况呢? 
一个原则是Service的onCreate的方法只会被调用一次,就是你无论多少次的startService又 bindService,Service只被创建一次。如果先是bind了,那么start的时候就直接运行Service的onStart方法,如果先 是start,那么bind的时候就直接运行onBind方法。如果你先bind上了,就stop不掉了,对啊,就是stopService不好使了,只 能先UnbindService, 再StopService,所以是先start还是先bind行为是有区别的。

服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务。这两个方法都可以启动Service,但是它们的使用场合有所不同。使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服务仍然运行。使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的特点。

如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。

如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onBind()方法。这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方法,接着调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建服务及绑定(也就是说onCreate()和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用unbindService()方法,调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法.

我的补充案例:

为什么music player每个Activity  unbindService后 musicservice仍在后台播放?

具体要看music service中的onBind()的实现,它里面的onBind()并没有直接去调用stotself()(它会检查当前是否有歌曲在播放),所以并不会直接就destroy,因此它还存在于后台继续播放。

转载于:https://www.cnblogs.com/tanqiantot/archive/2012/11/27/3126836.html

startService与bindService相关推荐

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

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

  2. 深入理解Android的startservice和bindservice

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

  3. Android之startService与bindService的区别

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

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

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

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

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

  6. startService和bindService的区别

    首先看下其生命周期的区别: 生命周期: onCreate → startCommand → onDestroy onCreate → onBind→onUnBind→ onDestroy 静态绑定对应 ...

  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. pstree进程管理
  2. sentinel使用(结合gateway)
  3. 禁用当前的账户win7_拯救你的win7系统,电脑优化到位,打游戏才会流畅
  4. es6 ...展开运算符
  5. 4.RabbitMQ 4种交换模式
  6. Android之用Intent.FLAG_ACTIVITY_CLEAR_TOP解决界面重复拉起问题
  7. 一个数据仓库转型者眼中的数据挖掘
  8. 95-850-020-源码-心跳-JobMaster与TaskExecutor之间的心跳检测
  9. 高通驱动9008安装_小米10/Redmi K30 Pro系列已支持GPU驱动独立更新,还能双版本切换...
  10. ‘nvidia-smi‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  11. ASP.NET开发学习视频教程大全(共800集)
  12. photoshop制作透明背景图片1
  13. win10总是更新失败
  14. 股票中的KDJ三根线分别代表什么?
  15. Pytest + Allure 测试报告定制
  16. An unexpected error prevented the server from fulfilling your request. (HTTP 500)
  17. 企业如何做好数据防泄漏需求分析
  18. 配置局域网内电脑快速传输数据
  19. matlab升幂降幂排列,升幂排列与降幂排列
  20. xp系统远程桌面关闭计算机,WinXP如何打开远程桌面?WinXP打开远程桌面的命令是什么?...

热门文章

  1. 从零开始刷Leetcode——数组(122.167.169)
  2. efficientnet-yolo3-tf2的实现
  3. 抽取CNN网络任意层的特征,VGG模型fine-tuning实践
  4. 昔年浅谈电商服务业务应如何推广
  5. 计算机信息机房,计算机信息中心机房建设标准
  6. mysql 二进制 查询_MySql如何插入和查询二进制数据_MySQL
  7. python实现编辑距离以及回溯路径
  8. 压缩等级_魔兽世界:9.0会落实等级压缩吗,简单分析一下压缩等级的好处
  9. python 计时器_谁能取代Python?我使用Go来部署机器学习模型的原因
  10. 通过XMPP协议实现推送信息