Handler及其用法

Service方式是两个进程progress之间通讯的方法。通过系统提供的绑定的方式对服务内的方法进行调用,从而实现Service的调用。不是直接调用,使用IBinder接口这种中间件实现的
在Service的继承类中自定义个IBinder的类,该类继承Binder父类即可。此内部类就可当做远程调用的桥梁,因为它是服务类的内部类,因此可以调用服务的任何方法和属性,
更由于在客户端创建bindService(new Intent(this, MyService.class), serviceConn , BIND_AUTO_CREATE);方法的时候需要一个ServiceConnection实例,该实例需要自己实现、
两个方法,onServiceConnected(ComponentName name, IBinder service)和onServiceDisconnected(ComponentName name) 。服务连接成功和断开事件,从而很容易
获得到IBinder的引用实例。具体如下:
在一个Activity调用一个服务的Play方法;
1)在mainActivity中添加两个按钮,一个是服务绑定,一个是服务方法远程调用。
public class MainActivity extends Activity {
 private MyBinder binder;
 private ServiceConnection serviceConn = new ServiceConnection() {
 
  @Override
  public void onServiceDisconnected(ComponentName name) {
   
  }
 
  @Override
  public void onServiceConnected(ComponentName name, IBinder service) {
   binder = (MyService.MyBinder)service;
  }
 };
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
 }
 public void btnBind(View view){
  bindService(new Intent(this, MyService.class), serviceConn , BIND_AUTO_CREATE);
 }
 
 public void btnPlay(View v){
  binder.play();
 }
 public void btnStop(View v){
  binder.stop();
 }
}

//2)创建自定义服务类,使用向导,自动注册:
public class MyService extends Service {
 private IBinder binder;
 @Override
 public void onCreate() {

  super.onCreate();
  binder = new MyBinder();
 }
 @Override
 public IBinder onBind(Intent intent) {
  // TODO: Return the communication channel to the service.
  return binder;
 }
 
 private void play(){
  Toast.makeText(this, "播放", Toast.LENGTH_LONG).show();
 }
 private void stop(){
  Toast.makeText(this, "停止", Toast.LENGTH_LONG).show();
 }
 
 class MyBinder extends Binder{
 
  public void play(){
   MyService.this.play(); //此处是要调用外部类的方法,使用限定名
  }
  public void stop(){
   MyService.this.stop();
  }
 
 }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值