Handler及其用法

来源:互联网 发布:网络百家家乐能玩吗? 编辑:程序博客网 时间:2024/06/04 11:46
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();  }  }}


0 0