service、IntentService

startService()(n)生命周期执行的方法依次是:第二个括号代表执行几次
onCreate()(1) ==> onStartCommand()(n);
调用stopService()(n),onDestroy()(1)。

调用bindService开启服务,生命周期执行的方法依次是:

1、onBind返回值是null;
onCreate() ==> onBind()(1);
调用unbindService结束服务,生命周期执行onDestroy方法,并且unbindService方法只能调用一次,多次调用应用会抛出异常。使用时也要注意调用unbindService一定要确保服务已经开启,否则应用会抛出异常。

2、onBind返回值是null;
onCreate()(1) ==> onBind()(1) ==> onServiceConnected()(n);
调用unbindService结束服务和上面相同。

startService和bindService开启服务时,他们与activity之间的关系。
1、startService开启服务以后,与activity就没有关联,不受影响,独立运行。
2、bindService开启服务以后,与activity存在关联,退出activity时必须调用unbindService方法,否则会报ServiceConnection泄漏的错误。另外还可以执行IPC通信。

重点

同一个服务可以用两种方式一同开启,没有先后顺序的要求,Service的onCreate只会执行一次。
关闭服务需要stopService和unbindService都被调用,也没有先后顺序的影响,Service的onDestroy也只执行一次。但是如果只用一种方式关闭服务,不论是哪种关闭方式,onDestroy都不会被执行,服务也不会被关闭。

IntentService与Service区别

1、IntentService是继承的Service
2、IntentService 中的 onCreate方法中开启了一个线程处理耗时的操作,所以Service需要有耗时操作的可以用IntentService。
3、另外IntentService中在onHandleIntent方法中处理耗时操作,处理完成之后会自动的结束自己。
4、IntentService内部采用了HandleThread和Handler的实现,IntentService又比线程优先级高,相对而言不容易被系统杀死来保证服务运行。
5、IntentService需要实现虚函数 onHandleIntent ,并在里面根据Intent的不同,进行不同的事务处理。


IntentService处理任务的细节


1、如果第一次启动后,onhandleIntent没处理完,继续startService,不会再重新实例化这个Service了,而是将请求放到请求队列里,等待第一个处理完再处理第二个。这种情况下,只有一个线程在运行。
2、假如现在有A,B,C三个请求,那就startService3次,如果在处理A请求调用了stopService,那A请求会继续执行完,但是B和C请求就不会执行;如果在执行C请求时候调用了stopService,C请求还是会执行完。
3、IntentService处理任务时是按请求顺序处理的,也就是一个接一个处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值