AIDL(二)案例解析

1.目录结构 app服务端 aidlclient客户端

 

 

一.服务端代码

2.1 IMyAidlInterface.aidl

// IMyAidlInterface.aidl

package com.example.zb.adiltestdemo;

 

 

interface IMyAidlInterface {

//求和

int add(int num1,int num2);

}

 

2.2服务 MyService

public class MyService extends Service {

public MyService() {

}

/**

* 当客户端绑定到该服务的时候,会执行该方法

* @param intent

* @return

*/

@Override

public IBinder onBind(Intent intent) {

return mIBinder;

 

}

 

private IBinder mIBinder=new IMyAidlInterface.Stub() {

@Override

public int add(int num1, int num2) throws RemoteException {

Log.i("TAG","收到了远程请求,输入的参数是"+num1+"和"+num2);

return num1+num2;

}

};

 

}

 

 

二。客户端代码

1.IMyAidlInterface.aidl

// IMyAidlInterface.aidl

package com.example.zb.adiltestdemo;

 

 

interface IMyAidlInterface {

//求和

int add(int num1,int num2);

}

 

注意:IMyAidlInterface代码跟服务端一致,包名必须也一致。

 

2.MainActivity 代码

package com.example.aidlclient;

import android.content.ComponentName;

import android.content.Context;

import android.content.Intent;

import android.content.ServiceConnection;

import android.os.Bundle;

import android.os.IBinder;

import android.os.RemoteException;

import android.support.v7.app.AppCompatActivity;

import android.util.Log;

import android.widget.Button;

import android.widget.EditText;

import com.example.zb.adiltestdemo.IMyAidlParParcelable;

import com.example.zb.adiltestdemo.Person;

import java.util.ArrayList;

import butterknife.BindView;

import butterknife.ButterKnife;

import butterknife.OnClick;

public class MainActivity extends AppCompatActivity {

 

@BindView(R.id.et_num1)

EditText mEtNum1;

@BindView(R.id.et_num2)

EditText mEtNum2;

@BindView(R.id.et_num3)

EditText mEtNum3;

@BindView(R.id.bt_jisuan)

Button mBtJisuan;

IMyAidlInterface iMyAidlInterface;

 

private ServiceConnection conn=new ServiceConnection() {

//绑定服务的时候

@Override

public void onServiceConnected(ComponentName name, IBinder service) {

//拿到了远程的服务

iMyAidlInterface = IMyAidlInterface.Stub.asInterface(service);

}

//断开服务的时候

@Override

public void onServiceDisconnected(ComponentName name) {

//回收资源

iMyAidlInterface=null;

}

};

 

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

ButterKnife.bind(this);

//软件一启动就绑定服务

bindService();

 

}

 

@OnClick(R.id.bt_jisuan)

public void onViewClicked() {

 

String num1 = mEtNum1.getText().toString().trim();

String num2 = mEtNum2.getText().toString().trim();

 

if(TextUtils.isEmpty(num1) || TextUtils.isEmpty(num2)){

Toast.makeText(this,"参数不能为空",Toast.LENGTH_SHORT).show();

}else {

try {

//调用远程的服务,获取结果

int res = iMyAidlInterface.add(Integer.parseInt(num1), Integer.parseInt(num2));

mEtNum3.setText(res+"");

} catch (RemoteException e) {

e.printStackTrace();

}

}

 

 

}

 

private void bindService() {

//获取到服务端

Intent intent = new Intent();

//新版本 必须显示intent启动 绑定服务

intent.setComponent(new ComponentName("com.example.zb.adiltestdemo","com.example.zb.adiltestdemo.MyService"));

bindService(intent,conn, Context.BIND_AUTO_CREATE);

}

@Override

protected void onDestroy() {

super.onDestroy();

//解除绑定服务

unbindService(conn);

}

}

 

 

3.R.layout.activity_main

 

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="com.example.aidlclient.MainActivity">

 

<EditText

android:id="@+id/et_num1"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:inputType="number"

/>

 

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="+"

/>

<EditText

android:id="@+id/et_num2"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:inputType="number"

/>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="="

/>

<EditText

android:id="@+id/et_num3"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:editable="false"

/>

 

<Button

android:id="@+id/bt_jisuan"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="AIDL远程计算"

/>

 

 

 

</LinearLayout>

github地址:https://github.com/b888zhang/ADILTestDemo

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值