使用步骤
总共需要的类如下:
1 创建服务类MyService继承Service,并在清单文件中配置
public class TestService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
}
2 定义一个接口IService,对外暴露方法
public interface IService {
public void callMethodInService(String name, int money);
}
3 在服务类MyService里定义代理对象MyBinder,实现定义的接口
private class MyBinder extends Binder implements IService{
public void callServiceMethed(){
调用服务的方法
}
...
}
4 在服务类MyService里的onBind()方法里返回这个代理对象
@Override
public IBinder onBind(Intent intent) {
System.out.println("服务被绑定了,返回IBinder中间人");
return new MyBinder();
}
5 调用端(MainActivity)采用bindService方法开启服务
public void bind(View view){
Intent intent = new Intent(this, TestService.class);
bindService(intent, new MyConn(), BIND_AUTO_CREATE);
}
6 在MainActivity中创建内部类实现ServiceConnection接口
private class MyConn implements ServiceConnection{
//服务成功连接时调用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("在activity得到了服务返回的代理人对象");
//强制类型转换IBinder转化成 MyBinder类型
iService = (IService) service;//
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
7 MainActivity中调用代理人对象的方法–间接调用了服务里面的方法.
public void call(View view){
iService.callMethodInService("name", 100);
}
附上全部的代码:
MainActivity类
public class MainActivity extends Activity {
IService iService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
//绑定中间人
public void bind(View view){
Intent intent = new Intent(this, MyService.class);
bindService(intent, new MyConn(), BIND_AUTO_CREATE);
}
private class MyConn implements ServiceConnection{
//服务成功连接时调用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
System.out.println("在activity得到了服务返回的代理人对象");
iService = (IService) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
//调用代理人对象的方法–间接调用了服务里面的方法.
public void call(View view){
iService.callMethodInService("name", 100);
}
}
MyService类
public class MyService extends Service{
//在服务类里定义代理对象,实现定义的接口
private class MyBinder extends Binder implements IService{
public void callMethodInService(String name, int money){
//调用服务里的方法
methodInService(name);
}
}
//在服务绑定成功后,返回服务中的中间人
@Override
public IBinder onBind(Intent intent) {
System.out.println("服务被绑定了,返回IBinder中间人");
return new MyBinder();
}
@Override
public void onCreate() {
System.out.println("服务被创建了...");
super.onCreate();
}
@Override
public void onDestroy() {
System.out.println("服务被销毁了....");
super.onDestroy();
}
//服务里面的方法
public void methodInService(String name){
//在服务里面的方法里编写业务逻辑
}
}
Iservice接口
public interface IService {
public void callMethodInService(String name, int money);
}