为什么要绑定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:提供绑定连接的接口,有两个方法必须实现:
onServiceConnected(ComponentName name, IBinder service)
在连接建立时被调用的函数,参数意义如下:
name 被绑定服务的具体名,格式:”ComponentInfo{app_package/service_package.service_class}”。
service 服务的
onBind方法所返回的IBinder,可以用来与服务通信。
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万+




被折叠的 条评论
为什么被折叠?



