Android 四大组件之Service

1. service生命周期(两种启动方式生命周期不一样)

StartService

       onCreate() -> onStartCommand() -> onDestroy()

        创建服务 -> 服务开始运行 -> 服务被停止

Bound Service

        onCreate() -> onBind() -> onUnbind() -> onDestroy()

        创建服务 -> 绑定服务 -> 取消绑定 -> 服务被停止   

 2. 两种启动方式(StartService BindService)

1> 通过调用startService启动, 如果Service还没有运行,则先调用onCreate()然后调用onStartCommand();如果Service已经运行,就只调用onStartCommand(),所以一个Service的onStartCommand方法可能会重复调用多次;通过调用stopService()会触发执行Service生命周期中的onDestroy()回调方法,会让服务停止;stopService()的时候直接onDestroy,如果是调用者自己直接退出而没有调用stopService()的话,Service会一直在后台运行。该Service的调用者再启动该Service后可以通过stopService关闭Service;stopSelf()

所以StartService的生命周期为:onCreate –> onStartCommand(可多次调用) –> onDestroy。

2> 通过bindService()启动,会执行Service生命周期中的onCreate()、onBind()回调方法,此时服务开始运行;onBind将返回给客户端一个IBind接口实例,IBind允许回调服务的方法,比如得到Service运行的状态或其他操作。如果绑定Service的Activity退出, Service也会关闭

所以BindService的生命周期为:onCreate –> onBind(只一次,不可多次绑定) –> onUnbind –> onDestory。

3.  IntentService

Service中编写耗时操作会引起ANR, 所以就需要引入IntentService,IntentService是继承Service的,它包含了Service的全部特性.那么与service不同的是,IntentService在执行onCreate操作的时候,内部开了一个线程,去执行你的耗时操作。

IntentService在执行onCreate的方法的时候,其实开了一个线程HandlerThread,并获得了当前线程队列管理的looper,在onStart的时候,把消息置入了消息队列,在消息被handler接受并且回调的时候,执行了onHandlerIntent方法,该方法的实现是子类去做的。

由此得出:

IntentService是通过Handler looper message的方式实现了一个多线程的操作,同时耗时操作也可以被这个线程管理和执行,同时不会产生ANR的情况。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值