本例和下列Local Service Controller 的Activity代码都定义在LocalServiceActivities.Java 中,作为 LocalServiceActivities 内部类实现的。 调用的Service为LocalService。
LocalService既可以做为“Started” Service,也可以做为”Bound” Service。
一个“Bound” Service 可以通过Client/Service模式提供Service。它运行 应用程序组件(比如Activity)与之绑定,然后接受请求并返回响应或者提供进程间通信机制,它的生命周期通常与调用它的组 件(如Activity)相同。 而对于LocalService即作为“Started” Service又作为“Bound”Service,如果LocalService已作为 “Started” Service启动,中即使所有Client都断开与它的绑定,LocalService也不会停止。
如果一个Service需要作 为“Bound”Service运行其它组件与之绑定,就必须实现onBind方法。这个方法返回一个IBound对象给Client。Client可以通过 这个IBind对象来调用Service的方法。
Client可以通过bindService来实现与“Bound”Service的绑定,Service 与 Client 的绑定是异步实现的,因此Client 需要通过 ServiceConnection 接口来监视与Service之间的连接。 Client 调用 bindService 时,bindService 立即返回,之后当Android系统为Client 和Service之间建立起链接后调用 ServiceConnection 的 onServiceConnection 来通知Client 与Service之间的链接建立成功,并给Client返回 Service 提供的IBind对象。
LocalService 只提供给同一个Application的组件使用,不提供进程间通信接口,因此只需要派生一个Binder的子类如 果直接的函数调用接口。
// Class for clients to access. Because we know // this service always runs in the same process as //its clients, we don't need to deal with IPC. public class LocalBinder extends Binder { LocalService getService() { return LocalService.this; } }
LocalBinder只提供了一个方法getService ,返回LocalService 对象自身。
LocalService的 onBind方法定 义:
@Override public IBinder onBind(Intent intent) { return mBinder; } // This is the object that receives interactions from clients. See // RemoteService for a more complete example. private final IBinder mBinder = new LocalBinder();
onBind的返回值为mBinder 为 LocalBinder类对象。它定义 了一个方法getService。
再来看看Client类 LocalServiceActivities.Binding 的实现:
private LocalService mBoundService;private ServiceConnection mConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder service) { // This is called when the connection with the service has been // established, giving us the service object we can use to // interact with the service. Because we have bound to a explicit // service that we know is running in our own process, we can // cast its IBinder to a concrete class and directly access it. mBoundService = ((LocalService.LocalBinder)service).getService(); // Tell the user about this for our demo. Toast.makeText(Binding.this, R.string.local_service_connected, Toast.LENGTH_SHORT).show(); } public void onServiceDisconnected(ComponentName className) { // This is called when the connection with the service has been // unexpectedly disconnected -- that is, its process crashed. // Because it is running in our same process, we should never // see this happen. mBoundService = null; Toast.makeText(Binding.this, R.string.local_service_disconnected, Toast.LENGTH_SHORT).show(); }};
以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索方法
, service
, client
, can通信
, getservice
, 一个
, The
, App之间的通信
, App之间通信
与Service
android studio、android官网、android sdk、android开发、android sdk下载,以便于您获取更多的相关知识。