Android Service绑定与跨进程通信

本文介绍了Android中Service的绑定方式,包括继承Binder、使用Messenger和AIDL,详细阐述了不同方法的适用场景。此外,还讲解了被绑定Service的生命周期以及跨进程通信的关键点,强调了正确管理和释放绑定的重要性。
摘要由CSDN通过智能技术生成

为什么要绑定Service?

Android的在服务器-客户端模式大量使用了Service绑定。绑定Service的好处就是你可以向Service发送、接收请求,甚至可以跨进程通信(IPC)。被绑定的服务通常是为了其他进程服务,而不是正常情况下的后台处理事件。

绑定Service的办法

在客户端中使用bindService (Intent service, ServiceConnection conn, int flags)
其中几个参数分别意义为:

Intent: 指向绑定Service的Intent。若是在其他进程中的Service,需要调用Intent.setComponent(new ComponentName(String packageName, String className))来指定Service。

ServiceConnection:提供绑定连接的接口,有两个方法必须实现:

  1. onServiceConnected(ComponentName name, IBinder service)

    在连接建立时被调用的函数,参数意义如下:

    • name 被绑定服务的具体名,格式:”ComponentInfo{app_package/service_package.service_class}”。

    • service 服务的onBind方法所返回的IBinder,可以用来与服务通信。

  2. onServiceDisconnected(ComponentName name)

    在连接断开时被调用的函数,参数name与onServiceConnected中含义相同。

flags: Context类下的常量,具体意义如下表

常量名 含义
BIND_ABOVE_CLIENT 8 如果当绑定服务期间遇到OOM需要杀死进程,客户进程会先于服务进程被杀死。
BIND_ADJUST_WITH_ACTIVITY 128 允许客户进程提升被绑定服务进程的优先级
BIND_ALLOW_OOM_MANAGEMENT 16 如果绑定服务期间遇到OOM需要杀死进程,被绑定的服务进程会被OOM列入猎杀对象中。
BIND_AUTO_CREATE 1 若绑定服务时服务未启动,则会自动启动服务。 注意,这种情况下服务的onStartCommand仍然未被调用(它只会在显式调用startService时才会被调用)。
BIND_DEBUG_UNBIND 2 使用此标志绑定服务之后的unBindService方法会无效。 这种方法会引起内存泄露,只能在调试时使用。
BIND_IMPORTANT 64 被绑定的服务进程优先级会被提到
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值