Service学习(三)

        最近学习Service,理论集合实际,动手写了一个ServiceDemo,由于前面2篇文章,我们对Service的使用场景以及为啥不用线程用Service有了一个初步了解后。我们就开始实战!

 

1.初步建立一个android工程,ui绘制4个按钮,分别对service的启动,绑定,停止,解绑做了研究。

 

2.分析原理

在Activity中第一次调用了Context.startService(...)方法会触发Service生命周期函数onCreate()、onStartCommand()、onStart(),当重复调用Context.startService(...)触发onStartCommand()、onStart(),但不再触发onCreate();Context.bindService()绑定服务会触发onBind(),多次绑定不触发任何方法;如果已经开启服务,再绑定服务,此时也不再触发onCreate()。

a)如果已经Context.startService(...),然后再Context.bindService() 还是先Context.bindService() 再Context.startService(...),此时已进入绑定服务闭环,此时调用stopService()是不触发Service中的onDestroy()方法,除非调用unbindService()才触发onDestroy();

b)单独的Context.startService(...)或绑定服务Context.bindService() ,对应都要通过stopService(),unbindService()来停止服务。

 

       如果已经解绑了服务unbindService(),然后再点击解绑unbindService(),此时会报错IllegalArgumentException,为了解决这个问题,我在Activity定义了一个private boolean mIsBind;当bindService()时设置为true,然后解绑doUnbindService()时判断为true才执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值