Service解析

来源:互联网 发布:南昌大学怎么样知乎 编辑:程序博客网 时间:2024/05/08 02:16

Service启动模式

1、context.startService():

    当我们首次调用startSevice()启动service时,首先调用其onCreate(),再调用onStartCommand(),然后service进入运行状态;此后若再调用startService(),则不会创建新的service对象,系统会找到已创建的service实例然后调用onStartCommand();若要停掉service,只需要调用context.stopService(),其onDestory()方法会被调用。

需要注意的是:

    1)不管前面我们调用多少次startService(),只需要调用一次stopService(),即可停止service。

2、context.bindService():

    当我们首次调用bindService绑定service时,首先调用其onCreate(),再调用onBind(),然后service进入运行状态,ServiceConnection.onServiceConnected()被调用,用户可以通过在此方法中获取AIDL对象,与service进行交互;此时也可以通过startService()执行onStartCommand();此后再调用bindService(),系统不会新建service实例,也不会调用其onBind()方法;若要解绑service,只需要调用unBindService(),此时其unBind(),onDestory()被调用。

需要注意的是:

    1)通过unBindService解绑服务,不会触发ServiceConnection.onServiceDisconnected(),此方法只会在service被异常销毁时才会调用;

    2)在bindService(后,若调用startService(),之后再调用unBindService(),只会触发其unBind(),不会触发onDesory(),可以通过stopService()来停掉service。

区别:

   1、startService()启动的service与调用者无必然联系,即调用者结束了自己的生命周期,只要没stopService(),service仍在运行;bindService()启动的service与调用者的生命周期相关联,当调用者被销毁,service也随之被销毁。

    2、bindService()常用于进程间通信


参考:

http://blog.csdn.net/liuhe688/article/details/6874378


0 0
原创粉丝点击