Android Service

本文详细介绍了 Android 中 Service 的两种类型:本地服务与远程服务,并解释了如何通过 bindService 获取 IBinder 对象。此外还对比了 BindService 和 StartedService 的区别,并提到了 ServiceManager 在系统服务中的作用。

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

Android Service 分本地service和remote service, 前者和调用者在一个进程内,使用方法很简单,后者和调用者不在同一个进程。


1. remote service如何拿到对应的IBinder

对于remote service,client端可以用bindService()绑定到一个service.Android系统调用service的onBind()方法。bindService()会立即返回,它不会同步返回IBinder给Client。要拿到IBinder,Client必须先创建一个ServiceConnection的实例并作为参数传给bindService()。ServiceConnection包含一个回调方法onServiceConnected,当绑定service成功后,系统调用这个回调方法来返回的IBinder。

2. BindService和StartedService异同:
Started Service中使用StartService()方法来进行方法的调用,调用者和服务之间没有联系,即使调用者退出了,服务依然在进行。

BindService中使用bindService()方法来绑定服务,调用者和绑定者绑在一起,调用者一旦退出服务也就终止了。


3. ServiceManager

并不是所有的service都需要注册到ServiceManager里的,一般Android系统自带的service会注册到ServiceManager。这样client可以通过字符串名字向ServiceManger查询得到service对应的IBinder,然后进行通讯。

个人觉得,而自己开发的service一般都不会注册到ServiceManager(至少目前我是没有在Service相关的Java代码中有发现注册service到ServiceManager的地方),而是client需要用到service的时候通过bindservice的方式去拿到IBinder进行通讯。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值