Android StartService和BindService

来源:互联网 发布:网络对交流的负面影响 编辑:程序博客网 时间:2024/05/10 23:40

一、Service相关方法

  • startService(),开启一个服务,可以在系统后台Running Apps里面看到服务在运行,不依赖于具体的某个组件,开启后会调用Service的onStartCommand()方法。
  • stopService(),停止一个服务,停止后Running Apps里面看不到服务在运行。
  • bindService(),绑定一个服务,绑定到具体组件上——Activity, Service, ContentProvider(BroadcastReceiver不行),会调用Service的onBind()/onRebind()方法,绑定时需要传入实现了ServiceConnection的对象,Service连接成功时会调用onServiceConnected()方法。 一个Service的onBind()/onUnbind()方法只会在第一个绑定它的组件绑定/解绑时执行。
  • unBindServce(),解绑一个服务,会将服务从相应组件上解绑,会调用Service的onUnBind()方法。

二、Service生命周期

startService()可以看作开启了一个服务,只有调用stopService()或stopSelf()才可以将其停止。

bindService()可以看做将服务绑定到组件中,生命周期随组件而定,直到组件销毁或者unBindService()后才消失。当没有startService时,bindService()首先会创建一个Service再进行绑定。如果已经有开启的Service,则会直接绑定。

  • 调用startService()后会执行onCreate()——>onStartCommand(),onCreate()只会执行一次,再次调用startService()只会执行onStartCommand()。调用stopService()后执行onDestroy()停止Service。
  • 调用bindService()后会执行onCreate()——>onBind()——>onServiceConnected(),同一组件只能绑定同一Service一次。调用unBindService()后执行onUnbind()——>onDestroy()停止。
  • 先调用startService(),会执行onCreate()——>onStartCommand()来启动Service,再调用bindService()会执行onBind()——>onServiceConnected()将Service绑定到组件中。然后
    • 调用unBindService()会执行onUnBind()来解除绑定,但此时Service并没有停止,调用stopService()后会执行onDestroy(),此时Service才停止。
    • 调用onStopService()后Service因为与组件绑定不会立即停止, 调用unBindService()后会执行onUnbind()——>onDestroy(),此时Service停止。
  • 先调用bindService(),再调用startService(),结果与3类似。
  • 一个Service的onBind()/onUnbind()方法只会在第一个绑定它的组件绑定/解绑时执行。例如Activity1调用了bindService(),那么onBind()方法会被调用,此时开启Activity2,再次调用bindService()则不会执行onBind()方法,而只会调用onServiceConnected()方法,此时调用unBindService()也不会调用onUnbind()方法,只有Activity1调用unBindService()才会执行onUnbind方法()。
  • onRebind()方法:当一个Service存在时,调用bindService()方法绑定,会调用onBind(),然后调用unBindService()方法解除绑定,会调用onUnbind(),此时如果再调用bindService绑定时(不管绑定者是不是当前组件),则会调用onServiceConnected()——>onRebind()方法。

    具体的生命周期图如下图所示:
    Service生命周期图

Demo地址:http://download.csdn.net/detail/kasogg/9256869

0 0
原创粉丝点击