Service的生命周期及使用详解

我们先看下service的定义及作用:
服务(Service)是 Android 中实现程序后台运行的解决方案,它非常适合用于去执行那
些不需要和用户交互而且还要求长期运行的任务。服务的运行不依赖于任何用户界面,即使
当程序被切换到后台,或者用户打开了另外一个应用程序,服务仍然能够保持正常运行。
不过需要注意的是,服务并不是运行在一个独立的进程当中的,而是依赖于创建服务
时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的服务也会停
止运行。
另外,也不要被服务的后台概念所迷惑,实际上服务并不会自动开启线程,所有的代码
都是默认运行在主线程当中的。也就是说,我们需要在服务的内部手动创建子线程,并在这
里执行具体的任务,否则就有可能出现主线程被阻塞住的情况。

对于做为Android四大组件的Service,它的生命周期如下图所示:
这里写图片描述
也就是说,他有两种启动方式:
startService:onCreate()- >onStartCommand()->startService()->onDestroy()
BindService:onCreate()->onBind()->onUnbind()->onDestroy()

startService的启动方式:
这种启动方式和启动activity很相像:
Intent intent = new Intent(this, MyService.class);
startService(intent);
在使用这种方式启动服务之后,此服务就会一直在后台运行,不受启动它的activity的生命周期的影响,除非我们在 service 的任何一个位置调用它的 stopService()方法;或者程序被杀死/结束,此service才会被停止

BindService的启动方式:
Intent bindIntent = new Intent(this, MyService.class);//Myservice是子定义的service,继承了service类
bindService(bindIntent, connection, BIND_AUTO_CREATE);//第一个参数就是intent,第二个参数是ServiceConnection,第三个参数是一个标志位,这里传入 BIND_AUTO_CREATE 表示在活动和服务进行绑定后自动创建服务。
它区别于startService的启动,他的生命周期是和启动它的acitvity(活动)是紧密相关的,也就是说,如果你在A活动里用bindService的方式启动了一个Serivce,那么如果这个activity被销毁,则此service也就会被终止。那如果我们想自己解除活动和服务之间的绑定该怎么办呢?调用一下 unbindService()方法就可以了。

那么有同学又问了,如果我同时用着两种方式启动,那该怎么销毁呢,是用stopService,还是用unbindService?
根据Android的系统机制,如果你同时用着两种方式启动、绑定了一个service,那么他就会一直处于运行状态,所以必须要以上两种状态同时不满足,也就是要同时调用stopService和unbindService,onDestroy()方法才能执行。

参考书籍:第一行代码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值