- 把服务看成一个领导,服务中有一个banZheng方法,如何才能访问?
- 绑定服务时,会触发服务的onBind方法,此方法会返回一个Ibinder的对象给MainActivity,通过这个对象访问服务中的方法
-
绑定服务
Intent intent = new Intent(this, BanZhengService.class); bindService(intent, conn, BIND_AUTO_CREATE);
- 绑定服务时要求传入一个ServiceConnection实现类的对象
-
定义这个实现类
class MyServiceconn implements ServiceConnection{ @Override public void onServiceConnected(ComponentName name, IBinder service) { zjr = (PublicBusiness) service; } @Override public void onServiceDisconnected(ComponentName name) { }
}
-
创建实现类对象
conn = new MyServiceconn();
-
在服务中定义一个类实现Ibinder接口,以在onBind方法中返回
class ZhongJianRen extends Binder implements
PublicBusiness
{ public void QianXian(){ //访问服务中的banZheng方法 BanZheng(); } public void daMaJiang(){ }
}
- 把QianXian方法抽取到接口PublicBusiness中定义
接口
public interface PublicBusiness {
void QianXian();
}
服务
public class LeaderService extends Service {
@Override
public IBinder onBind(Intent intent) {
// 返回一个Binder对象,这个对象就是中间人对象
return new ZhouMi();
}
class ZhouMi extends Binder implements PublicBusiness{
public void QianXian(){
banZheng();
}
public void daMaJiang(){
System.out.println("陪李处打麻将");
}
}
public void banZheng(){
System.out.println("李处帮你来办证");
}
}
调用
public class MainActivity extends Activity {
private Intent intent;
private MyServiceConn conn;
PublicBusiness pb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
intent = new Intent(this, LeaderService.class);
conn = new MyServiceConn();
//绑定领导服务
bindService(intent, conn, BIND_AUTO_CREATE);
}
public void click(View v){
//调用服务的办证方法
pb.QianXian();
}
class MyServiceConn implements ServiceConnection{
//连接服务成功,此方法调用
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// TODO Auto-generated method stub
pb = (PublicBusiness) service;
}
@Override
public void onServiceDisconnected(ComponentName name) {
// TODO Auto-generated method stub
}
}
}