您的位置:首页 > 移动开发 > Android开发

Android studio之AIDL的使用

2017-03-22 16:50 148 查看
AIDL的使用

基本数据的传递和复杂对象的传递

基本数据的传递流程

1.在main文件夹下右键创建file>AIDL>AIDL文件

生成一个IMyAidlInterface.aidl这个接口就是我们将要在服务中实现的然后进行跨进程之间的数据传递

下面是抽象方法

int basicTypes()

AIDL文件创建完成

我们进行编译AIDL的编译

标题栏中的build选项中make module”项目名”进行编译,在项目文件夹下的build>generated>source>aidl>debug>下面会生成一个包>IMyAidlInterface 内容就是自动编译出来的,,,,,,,编译成功,,,这样我们的aidl告一段路

然后在我们的包下面创建一个服务MyService集成Service 实现相应的的方法

在onBind()返回一个IMyservice代码如下

public class MyService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return new IMyservice();
}


然后我们在创建一个内部类集成 IMyAidlInterface.Stub

重写 IMyAidlInterface中的方法,返回我们要传递的值

不要忘记注册服务

这样我们就实现了我们的

服务端的代码

下面搭建客户端

将服务端中的aidl文件夹,复制到我们客户端的main文件夹下面

然后将我们的 我们创建服务连接对象ServiceConnection

private IMyAidlInterface mService;
ServiceConnection connection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
mService = IMyAidlInterface.Stub.asInterface(service);
}

@Override
public void onServiceDisconnected(ComponentName name) {
mService = null;
}
};


下一步就是进行服务的绑定了

Intent intent = new Intent();
//   intent.setAction("zgkx.chinaapp.com.myapplication");

intent.setPackage("zgkx.chinaapp.com.myapplication");
bindService(intent, connection, Context.BIND_AUTO_CREATE);


然后就是获取数据:

获取数据

int a=mService .basicTypes()


这样我们就获取了a代码了;

下面是复杂对象的传递主要牵扯对象的处理

正常创建一个对象类person,实现Parcelable

服务端在创建IMyAidlInterface.aidl后还要创建一个文件对象名.aidl

// IMyAidlInterface.aidl的代码
package zgkx.chinaapp.com.myapplication;
// Declare any non-default types here with import statements
//注意这里需要手动引用类
import zgkx.chinaapp.com.myapplication.Person;
interface IMyAidlInterface {
/**
* Demonstrates some basic types that you can use as parameters
* and return values in AIDL.
*/
Person basicTypes();
}


创建一个Person.aidl

// Person.aidl
package zgkx.chinaapp.com.myapplication;

// Declare any non-default types here with import statements

parcelable Person ;


接下来就是编译aidl文件,方法同上

服务端在IMyservice服务中返回一个Person对象就ok了

这样服务端又一次完成配置

客户端配置

复制服务端的aidl文件

创建一个和服务端包名相同的包,复制Person类,这样是保证Person的全类名完全一致

后面获取数据就类似了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息