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。
发布了30 篇原创文章 · 获赞 58 · 访问量 8万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览