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

猜你喜欢

转载自blog.csdn.net/lumingzhang/article/details/89713512
今日推荐