BindService

本文详细介绍了如何在Android中使用Binder服务实现组件间通信。包括Binder服务的基本概念、创建和服务绑定的过程,以及通过示例代码展示了如何在Activity与Service之间建立绑定连接。

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

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

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

1.扩展Binder类

2.使用Messenger

3.使用AIDL (Android Interface Definition Language)

通过扩展Binder类创建创建BoundServices

步骤:

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

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

         返回当前服务对象

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

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

****************************************************** 简单示例***************************************************************************************************************

1、MainActivity.xml

中添加两个按钮

	Button startbtnButton
	Button stopbtnButton

2、MainActivity.java

package com.tengern.bindservicedemo;

import com.tengern.bindservicedemo.BinderServiceDEMO.MyBinder;

import android.os.Bundle;
import android.os.IBinder;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Intent;
import android.content.ServiceConnection;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;

public class MainActivity extends Activity {
	//private static final String TAG="MainActivity";
	protected boolean isConnected;
	private Button startbtnButton=null;
	private Button stopbtnButton=null;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		
		startbtnButton=(Button)findViewById(R.id.btnstart);
		stopbtnButton=(Button)findViewById(R.id.btnstop);
		startbtnButton.setOnClickListener(listener);
		stopbtnButton.setOnClickListener(listener);
	}
	private OnClickListener listener=new OnClickListener() {
		@Override
		public void onClick(View v) {
			switch (v.getId()) {
			case R.id.btnstart:
				bindService();
				break;
			case R.id.btnstop:
				unbindService();
				break;
			default:
				break;
			}
			
		}
	};
	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.activity_main, menu);
		return true;
	}
	protected void unbindService() {
		// TODO Auto-generated method stub
		if (isConnected) {
			unbindService(conn);
		}
	}
	protected void bindService() {
		// TODO Auto-generated method stub
		Intent intent=new Intent(MainActivity.this, BinderServiceDEMO.class);
		bindService(intent, conn,BIND_AUTO_CREATE);
	}
	private ServiceConnection conn=new ServiceConnection() {
		
		@Override
		public void onServiceDisconnected(ComponentName arg0) {
			// TODO Auto-generated method stub
			isConnected=false;
		}
		
		@Override
		public void onServiceConnected(ComponentName arg0, IBinder binder) {
			// TODO Auto-generated method stub
			MyBinder myBinder=(MyBinder)binder;
			BinderServiceDEMO serviceDEMO=myBinder.getservice();
			serviceDEMO.Mymethod();
			isConnected=true;
			
		}
	};

}

3、BinderServiceDEMO.java继承 Service 
package com.tengern.bindservicedemo;

import android.app.Service;
import android.content.Intent;
import android.os.Binder;
import android.os.IBinder;
import android.util.Log;

public class BinderServiceDEMO extends Service {

	private static final String TAG="BinderServiceDEMO";
	/*
	 * 	在Service类中,创建一个Binder实例
	 * 	包含客户端能调用的公共方法
	 *	返回当前服务对象
	 */
	private MyBinder binder=new MyBinder();
	
	public class MyBinder extends Binder {
		/*
		 * 返回当前服务对象
		 * */
		public BinderServiceDEMO getservice(){
			return BinderServiceDEMO.this;
		}
	}
	@Override
	public IBinder onBind(Intent intent) {
		// TODO Auto-generated method stub
		return binder;
	}
	/*
	 *自定义的方法实现一些组件的功能
	 */
	public void Mymethod() {
		Log.i(TAG, "Mymethod start.....");

	}
}
4、Androidmanifest.xml

中添加service服务

 	<service
            android:name=".BinderServiceDEMO"/>

和activity同级





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值