Android AIDL自动生成Java文件测试

/********************************************************************************
 *                                 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
                    
                }
            };
        ......
        }
    }
原文地址:https://www.cnblogs.com/zengjfgit/p/5469705.html