Service的两种启动方式和区别?

第一种启动方式:startService(Intent)

启动服务 生命周期方法流程:onCreate --- > onStartCommand 

关闭服务:stopService(Intent)
关闭服务 生命周期方法流程 :onDestory

第二种启动方式:bindService(Intent , ServiceConnection , flag)

启动服务 生命周期方法流程:onCreate --- > onBind

关闭服务:stopService(Intent)
关闭服务 生命周期方法流程 :onUnBind ----> onDestory

区别:

startService启动Service ,Service有独立的生命周期,不依赖该组建;
多次调用startService方法,会重复调用onStartCommand方法;
必须通过stopService或者stopSelf来停止服务(IntentService会自动调用stopSelf方法)

bindService启动Service,多次调用此方法,只会调用一次onBind方法;
bindService,Service 依赖于此组件,该组件销毁后,Service也会随之销毁。

扩展:
1,同一个Service,先启动startService,然后在bindService,如何把服务停掉?

    无论被startService调用多少次,如需要stopService或者stopSelf方法 一次;
    调用n次bindService,必须调用n次unBindService方法;
因此,需要调用一次stopService(或者stopSelf)方法,和n次unBindService方法,执行顺序没有要求,
最后一个stopService或者unBindService方法会导致Service的 onDestory执行。

2,Service的生命方法是运行在那个线程中?

    Service默认运行在主线程,所以其生命方法也是运行在主线程中,如果需要在Service中进行耗时操作,必须另起线程(或者使用IntentService)否则会引起ANR。

猜你喜欢

转载自blog.csdn.net/ding_gc/article/details/79733864