Developer--Services

本文详细介绍了Android中的Service组件,包括其背景、两种启动方式(Started和Bound)、重要方法(如onStartCommand, onBind等),并强调了Service在Android应用中后台运行的重要性及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、综述

service是能够在后台长期run的应用组件,不提供用户接口。另一个应用组件能够start一个service,即使用户转向另一个应用,后台的service也会保持。甚至,一个组件能够绑定到一个service,然后进行IPC(进程间通信)。举例,一个service能够处理网络请求,播放音乐,与content provider交互等。


2、Service的两种方式

1)Started :一个应用组件(比如 activity)startService().一旦开始,Service会无限期的运行,即使创建它的组件destroy掉。但是,如果服务是下载file,当这个操作完成时,这个服务自己就会停止。

2)Bound:应用组件和service bind在一起,通过 bindService()。一个bound service提供 客户-服务端 接口,允许组件和服务交互,发送request,得到结果,甚至进行IPC。但是,这个时候,service依赖于绑定在一起的application,解除bound之后,serice就destroy了。


注意:service不会自己创建一个线程,最好的方法是你在service里面创建一个新线程去完成耗时操作,以降低ANR(Application Not Responding) 错误,保持主线程的优雅。

3、重要方法

两部分,一部分是重要的回调方法,一般复写在onStarCommand()里面,一部分是提供组件绑定到service的机制。

onStartCommand():通过startService()方法 调用stopSelf() 或 stopService()结束

onBind():通过bindService()需要提供交互的接口,返回IBinder。如果不允许bind,返回空

onCreate():service首次创建时调用,如果已经run,不调用

onDestroy():释放资源


注意,service需要在manifest注册。

开发者文档里也讨论了什么时候会kill掉service,什么service可能会一直run。

下面是生命周期图。






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值