您的位置:首页 > 大数据 > 人工智能

一个AIDL的简单使用

2016-08-26 15:26 246 查看
使用过程中我们一般会分成2个模块,即client和server。

首先简单说下整个的流程

1、在服务端新建*.aidl文件

2、在服务端新建一个service,并实现aidl文件中的方法。

3、客户端绑定该service,获取服务对象调用aidl中定义的方法。

看下代码结构:





一、新建AIDL文件

MyAidl.aidl中的方法定义如下:

package com.kong.aidl;
import com.kong.aidl.Person;
interface MyAidl {
String getValue();
Person cal(String name,int age);
}


由于用到Person,所以我们需要再建一个aidl文件(如果aidl文件中用到的只是一些基本数据类型的话,这一步基本就结束了可以直接看第二步)

Person.aidl

package com.kong.aidl;
parcelable Person;


之后继续建立Person.java文件,其中的get和set方法略去。。。

public class Person implements Parcelable{

private String name;
private int age;

@Override
public int describeContents() {
// TODO Auto-generated method stub
return 0;
}

public Person(String name, int age) {
this.name = name;
this.age = age;
}
public Person(Parcel source) {
readFromParcel(source);
}

@Override
public void writeToParcel(Parcel dest, int flags) {
// TODO Auto-generated method stub
dest.writeString(name);
dest.writeInt(age);
}
public void readFromParcel(Parcel source) {
name = source.readString();
age = source.readInt();
}

public static final Parcelable.Creator<Person> CREATOR=new Creator<Person>() {

@Override
public Person[] newArray(int size) {
// TODO Auto-generated method stub
return new Person[size];
}

@Override
public Person createFromParcel(Parcel source) {
// TODO Auto-generated method stub
return new Person(source);
}
};

}


二、建立service

在服务端建立一个service,实现aidl中定义的那些方法

myservice.java

public class MyService extends Service {

public class MyServiceImpl extends MyAidl.Stub {
@Override
public String getValue() throws RemoteException {
return "Android.......";
}

@Override
public Person cal(String name, int age) throws RemoteException {
// TODO Auto-generated method stub
Person p=new Person(name, age);
return p;
}
}

@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
return new MyServiceImpl();
}

}


最后,不要忘了在AndroidManifest.xml注册这个service

<service android:name="com.kong.aidl.MyService" >
<intent-filter>
<action android:name="com.kong.aidl.MyAidl" />
</intent-filter>
</service>


三、客户端的绑定和调用

public class AidlDemoActivity extends Activity implements OnClickListener {
private MyAidl myService = null;
private Button btnInvokeAIDLService;
private Button btnBindAIDLService;
private TextView textView;
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
// 获得服务对象
myService = MyAidl.Stub.asInterface(service);
btnInvokeAIDLService.setEnabled(true);
}
@Override
public void onServiceDisconnected(ComponentName name) {}
};
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.btnBindAIDLService:
// 绑定AIDL服务
bindService(new Intent("com.kong.aidl.MyAidl"), serviceConnection, Context.BIND_AUTO_CREATE);
break;
case R.id.btnInvokeAIDLService:
try {
textView.setText(myService.cal("xiaoming", 12).getName());
} catch (Exception e) {

}
break;
}
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
btnInvokeAIDLService = (Button) findViewById(R.id.btnInvokeAIDLService);
btnBindAIDLService = (Button) findViewById(R.id.btnBindAIDLService); btnInvokeAIDLService.setEnabled(false);
textView = (TextView) findViewById(R.id.textview);
btnInvokeAIDLService.setOnClickListener(this);
btnBindAIDLService.setOnClickListener(this);
}
}


整个例子并没有实际意义,仅作为学习参考使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  aidl