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

Android AIDL自动生成Java文件测试

2016-05-08 07:19 423 查看
/********************************************************************************
*                                 Android AIDL自动生成Java文件测试
* 说明:
*     知道有aidl这东西已经挺久了,但是一直没有花时间来系统了解一下其工作机制,现在
* 花点时间一点一点验证一下其功能。
*
*                                                 2016-5-8 深圳 南山平山村 曾剑锋
*******************************************************************************/

一、参考文章:
1. Android AIDL使用详解 http://blog.csdn.net/stonecao/article/details/6425019 2. android进程间通信:使用AIDL http://blog.csdn.net/saintswordsman/article/details/5130947 
二、cat forService.aidl
package com.example.aidltest.aidl;

import com.example.aidltest.aidl.forActivity;

interface forService {
void registerTestCall(forActivity cb);
void invokCallBack();
}

三、cat forService.java
/*
* This file is auto-generated.  DO NOT MODIFY.
* Original file: D:\\soft\\Android\\workspace\\AidlTest\\src\\com\\example\\aidltest\\aidl\\forService.aidl
*/
package com.example.aidltest.aidl;

// 继承了android.os.IInterface接口
public interface forService extends android.os.IInterface {
/** Local-side IPC implementation stub class. */
// Stub类继承了Binder,并继承我们在aidl文件中定义的接口
public static abstract class Stub extends android.os.Binder implements
com.example.aidltest.aidl.forService {
private static final java.lang.String DESCRIPTOR = "com.example.aidltest.aidl.forService";

/** Construct the stub at attach it to the interface. */
public Stub() {
this.attachInterface(this, DESCRIPTOR);
}

/**
* Cast an IBinder object into an com.example.aidltest.aidl.forService
* interface, generating a proxy if needed.
*/
// 在使用的时候经常会看到这一部分的内容
public static com.example.aidltest.aidl.forService asInterface(
android.os.IBinder obj) {
if ((obj == null)) {
return null;
}
android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);
if (((iin != null) && (iin instanceof com.example.aidltest.aidl.forService))) {
return ((com.example.aidltest.aidl.forService) iin);
}
return new com.example.aidltest.aidl.forService.Stub.Proxy(obj);
}

@Override
public android.os.IBinder asBinder() {
return this;
}

@Override
public boolean onTransact(int code, android.os.Parcel data,
android.os.Parcel reply, int flags)
throws android.os.RemoteException {
switch (code) {
case INTERFACE_TRANSACTION: {
reply.writeString(DESCRIPTOR);
return true;
}
case TRANSACTION_registerTestCall: {
data.enforceInterface(DESCRIPTOR);
com.example.aidltest.aidl.forActivity _arg0;
_arg0 = com.example.aidltest.aidl.forActivity.Stub
.asInterface(data.readStrongBinder());
this.registerTestCall(_arg0);
reply.writeNoException();
return true;
}
case TRANSACTION_invokCallBack: {
data.enforceInterface(DESCRIPTOR);
this.invokCallBack();
reply.writeNoException();
return true;
}
}
return super.onTransact(code, data, reply, flags);
}

private static class Proxy implements
com.example.aidltest.aidl.forService {
private android.os.IBinder mRemote;

Proxy(android.os.IBinder remote) {
mRemote = remote;
}

@Override
public android.os.IBinder asBinder() {
return mRemote;
}

public java.lang.String getInterfaceDescriptor() {
return DESCRIPTOR;
}

@Override
public void registerTestCall(
com.example.aidltest.aidl.forActivity cb)
throws android.os.RemoteException {
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
try {
_data.writeInterfaceToken(DESCRIPTOR);
_data.writeStrongBinder((((cb != null)) ? (cb.asBinder())
: (null)));
mRemote.transact(Stub.TRANSACTION_registerTestCall, _data,
_reply, 0);
_reply.readException();
} finally {
_reply.recycle();
_data.recycle();
}
}

@Override
public void invokCallBack() throws android.os.RemoteException {
android.os.Parcel _data = android.os.Parcel.obtain();
android.os.Parcel _reply = android.os.Parcel.obtain();
try {
_data.writeInterfaceToken(DESCRIPTOR);
mRemote.transact(Stub.TRANSACTION_invokCallBack, _data,
_reply, 0);
_reply.readException();
} finally {
_reply.recycle();
_data.recycle();
}
}
}

static final int TRANSACTION_registerTestCall = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);
static final int TRANSACTION_invokCallBack = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);
}

// AIDL中自定义的方法,没有实现
public void registerTestCall(com.example.aidltest.aidl.forActivity cb)
throws android.os.RemoteException;

public void invokCallBack() throws android.os.RemoteException;
}

四、cat MainActivity.java
public class MainActivity extends ActionBarActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
......
new forService.Stub() {

@Override
public void registerTestCall(forActivity cb) throws RemoteException {
// TODO Auto-generated method stub

}

@Override
public void invokCallBack() throws RemoteException {
// TODO Auto-generated method stub

}
};
......
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: