项目使用AIDL实现进程通信

本文介绍了一个具体的远程服务交互案例,包括服务端与客户端的具体实现流程。服务端通过定义AIDL接口、实现`onBind()`方法等步骤提供服务;客户端则通过绑定服务、处理业务逻辑来调用服务端提供的功能。

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

基本步骤

remoteService

1、生成aidl文件(先生成java的接口文件,修改后缀名为aidl,去掉public)

 

2、定义业务服务StudentQueryService及其内部类StudentQueryBinder

 

3、实现StudentQueryService的onBind()和query()

 

4、在manifest中配置服务信息

=====================================================

实现的代码

1、生成aidl文件

interface StudentQuery {
	String queryStudent(int number);
}

 

2、定义业务服务StudentQueryService及其内部类StudentQueryBinder

public class StudentQueryService extends Service {
	private final class StudentQueryBinder extends StudentQuery.Stub{
		public String queryStudent(int number) throws RemoteException {			
			return query(number);
		}		
	}
}

 

3、实现StudentQueryService的onBind()和query()

 

@Override
	public IBinder onBind(Intent intent) {
		return binder;
	}
	private String query(int number){
		if(number > 0 && number < 4){
			return names[number - 1];
		}
		return null;
	}

 

4、在manifest中配置服务信息

       <service android:name=".StudentQueryService">
            <intent-filter >
                <action android:name="com.peter.remoteservice.queryinfo"/>                
            </intent-filter>            
        </service>

 

==========================================================

 

remoteServiceClient的基本操作和实现代码

基本操作

1、新建工程和Activity, copy刚才的aidl文件到src下

 

2、在Activity中添加StudentQuery属性,新建内部类StudentConnection

 

3、实现onCreate() onDestroy()、按钮处理事件、业务逻辑方法等

 

----------------------------------------------------------------------------------------------------

实现代码

2、在Activity中添加StudentQuery属性,新建内部类StudentConnection

private StudentQuery studentQuery;
private final class StudentConnection implements ServiceConnection {
		public void onServiceConnected(ComponentName name, IBinder service) {
			studentQuery = StudentQuery.Stub.asInterface(service);
		}
		public void onServiceDisconnected(ComponentName name) {
			studentQuery = null;
		}
	}

 

3、实现onCreate() onDestroy()、按钮处理事件、业务逻辑方法等

@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		numberText = (EditText) this.findViewById(R.id.number);
		resultView = (TextView) this.findViewById(R.id.resultView);
		Intent intent = new Intent("com.peter.remoteservice.queryinfo");
		bindService(intent, conn, BIND_AUTO_CREATE);
	}

	public void queryStudent(View v) {
		String number = numberText.getText().toString();
		int num = Integer.valueOf(number);
		try {
			resultView.setText(studentQuery.queryStudent(num));
		} catch (RemoteException e) {
			e.printStackTrace();
		}
	}

	@Override
	protected void onDestroy() {
		unbindService(conn);
		super.onDestroy();
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值