我完全与Bounded Services混淆。我的问题是: - Binding是什么意思? Binder课程做什么?从服务返回iBinder对象是什么意思?什么是IBinder对象? onBind方法的工作原理是什么? 这些是关于有界服务的几个问题。 请详细解释我。我已经阅读过这些文件了。目前还不清楚。
答案 0 :(得分:7)
绑定服务:
绑定服务是允许应用程序组件通过调用bindService()来创建长期连接来绑定它的服务。
如果要从应用程序中的活动和其他组件与服务交互,或者通过进程间通信(IPC)将某些应用程序的功能公开给其他应用程序,请创建绑定服务。
要创建绑定服务,请实现onBind()回调方法以返回定义用于与服务进行通信的接口的IBinder。然后,其他应用程序组件可以调用bindService()来检索接口并开始调用服务上的方法。该服务仅用于服务绑定到它的应用程序组件,因此当没有绑定到该服务的组件时,系统会销毁它。您无需像通过onStartCommand()启动服务时那样停止绑定服务。
<强>的IBinder:强>
要创建绑定服务,您必须定义指定客户端如何与服务通信的接口。服务和客户端之间的这个接口必须是IBinder的实现,并且是您的服务必须从onBind()回调方法返回的。客户端收到IBinder后,可以通过该接口开始与服务进行交互。
<强> onBind():强>
当另一个组件想要与服务绑定(例如执行RPC)时,系统通过调用bindService()来调用此方法。在此方法的实现中,您必须提供一个客户端用于通过返回IBinder与服务进行通信的接口。您必须始终实现此方法;但是,如果您不想允许绑定,则应返回null。
答案 1 :(得分:0)
这是上述答案的示例
**该代码将为您清除**
public class MyServiceClass extends Service {
//binder given to client
private final IBinder mBinder = new LocalBinder();
//our inner class
public LocalBinder extends Binder {
public MyServiceClass getService() {
return MyServiceClass.this;
}
}
@Override
public IBinder onBind(Intent intent) {
return mBinder;
}
public void doSomeWork(int time){ //we will call this function from outside, which is the whole idea of this **Binding**}
}
下一步是绑定自身
在您的MainClass中或您想绑定服务的任何地方,
定义用于服务绑定的回调,并传递给bindService()
私有ServiceConnection serviceConnection =新的ServiceConnection(){
@Override
public void onServiceConnected(ComponentName className, IBinder service) {
MyServiceClass.LocalBinder binder =(MyServiceClass.LocalBinder)service;
timerService = binder.getService();
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
//what to do if service diconnect
}
};
绑定时刻
Intent intent = new Intent(this, MyServiceClass.class);
bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
取消绑定服务
unbindService(serviceConnection);
timerService.doSomeWork(50);