什么是Bound Services

本文详细介绍了Android中的BoundService,包括其工作原理、生命周期以及如何创建和使用BoundService。提供了具体的实现代码示例,帮助读者理解如何通过Binder机制实现组件间的绑定和通信。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Bound Service 允许其它的组件(比如Activities)绑定到这个Service上,可以发送请求,也可以接受请求,甚至进行进程间的通话。Bound Service 仅仅在服务于它的组件时存在(只要它被组件绑定时存在),不能独自无限期的在后台运行。



创建Bound Services

当创建一个能提供绑定功能的服务时,我们必须提供一个IBinder对象,客户端能使用这个对象与服务进行交互。在Android中有三种方式定义方式:

1.扩展Binder类  // 仅为本应用程序所使用,并且服务和应用程序在同一个进程时使用。

2.使用Messenger

3.使用AIDL (Android Interface Definition Language)


通过扩展Binder类创建创建Bound Services

步骤:

a.在Service类中,创建一个Binder实例

 包含客户端能调用的公共方法

 public class MyBinder extends Binder {

  public BinderService getService() {
   return BinderService.this;
  }
 }


返回当前服务对象

private MyBinder binder = new MyBinder();

 @Override
 public IBinder onBind(Intent intent) {
  
  return binder;
 }


根据需求定义自己的公共方法,处理服务。

public void myMethod() {
  Log.i(TAG, "myMethod()");
 }
以上是创建好了Bound Services

b.在onBind()方法中返回Binder实例

创建一个Activity应用程序来绑定Bound Services

public class BinderActivity extends Activity {
	
	private Button btnStartBinderService;
	private Button btnStopBinderService;
	private boolean isConnected = false;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.binder);
        btnStartBinderService = (Button)findViewById(R.id.btnStartBinderService);
        btnStopBinderService = (Button)findViewById(R.id.btnStopBinderService);
        btnStartBinderService.setOnClickListener(listener);
        btnStopBinderService.setOnClickListener(listener);
    }
    
    private OnClickListener listener = new OnClickListener() {
		
		@Override
		public void onClick(View v) {
			
			//Intent intent = new Intent(MainActivity.this, ExampleService.class);
			switch (v.getId()) {
			case R.id.btnStartBinderService:
				
				bindService();
				
				break;

			case R.id.btnStopBinderService:
				unBind();
				break;
			}
		}
		
	};
	
	private void unBind() {
		
		if (isConnected) {
			unbindService(conn);
			
		}
	}

	private void bindService() {
		
		Intent intent = new Intent(BinderActivity.this, BinderService.class);
		bindService(intent, conn, Context.BIND_AUTO_CREATE);
	}
	
	private ServiceConnection conn = new ServiceConnection() {
		
		@Override
		public void onServiceDisconnected(ComponentName name) {
			// TODO Auto-generated method stub
			isConnected = false;
		}
		
		@Override
		public void onServiceConnected(ComponentName name, IBinder binder) {
			// TODO Auto-generated method stub
			MyBinder myBinder = (MyBinder)binder;
			BinderService service  = myBinder.getService();
			service.myMethod();
			isConnected = true;  
		}
	};

}

c.在客户端,从onServiceConnected()方法中获得Binder实例。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值