android 继承binder,Android binder原理

package com.yuanhh.appbinderdemo;

public interface IRemoteService extends android.os.IInterface {

/** * Local-side IPC implementation stub class. */

public static abstract class Stub extends android.os.Binder implements com.yuanhh.appbinderdemo.IRemoteService {

private static final java.lang.String DESCRIPTOR = "com.yuanhh.appbinderdemo.IRemoteService";

/** * Stub构造函数 */

public Stub() {

this.attachInterface(this, DESCRIPTOR);

}

/** * 将IBinder 转换为IRemoteService interface */

public static com.yuanhh.appbinderdemo.IRemoteService asInterface(android.os.IBinder obj) {

if ((obj == null)) {

return null;

}

android.os.IInterface iin = obj.queryLocalInterface(DESCRIPTOR);

if (((iin != null) && (iin instanceof com.yuanhh.appbinderdemo.IRemoteService))) { return ((com.yuanhh.appbinderdemo.IRemoteService) iin);

}

return new com.yuanhh.appbinderdemo.IRemoteService.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_getPid: {

data.enforceInterface(DESCRIPTOR);

int _result = this.getPid();

reply.writeNoException();

reply.writeInt(_result);

return true;

}

case TRANSACTION_getMyData: {

data.enforceInterface(DESCRIPTOR);

com.yuanhh.appbinderdemo.MyData _result = this.getMyData();

reply.writeNoException();

if ((_result != null)) { reply.writeInt(1);

_result.writeToParcel(reply, android.os.Parcelable.PARCELABLE_WRITE_RETURN_VALUE);

} else {

reply.writeInt(0);

}

return true;

}

}

return super.onTransact(code, data, reply, flags);

}

private static class Proxy implements com.yuanhh.appbinderdemo.IRemoteService {

private android.os.IBinder mRemote;

/** * Proxy构造函数 */

Proxy(android.os.IBinder remote) {

mRemote = remote;

}

@Override

public android.os.IBinder asBinder() {

return mRemote;

}

public java.lang.String getInterfaceDescriptor() {

return DESCRIPTOR;

}

@Override

public int getPid() throws android.os.RemoteException {

android.os.Parcel _data = android.os.Parcel.obtain();

android.os.Parcel _reply = android.os.Parcel.obtain();

int _result;

try {

_data.writeInterfaceToken(DESCRIPTOR);

mRemote.transact(Stub.TRANSACTION_getPid, _data, _reply, 0);

_reply.readException();

_result = _reply.readInt();

} finally {

_reply.recycle();

_data.recycle();

}

return _result;

}

@Override

public com.yuanhh.appbinderdemo.MyData getMyData() throws android.os.RemoteException {

android.os.Parcel _data = android.os.Parcel.obtain();

android.os.Parcel _reply = android.os.Parcel.obtain();

com.yuanhh.appbinderdemo.MyData _result;

try {

_data.writeInterfaceToken(DESCRIPTOR);

mRemote.transact(Stub.TRANSACTION_getMyData, _data, _reply, 0);

_reply.readException();

if ((0 != _reply.readInt())) { _result = com.yuanhh.appbinderdemo.MyData.CREATOR.createFromParcel(_reply);

} else {

_result = null;

}

} finally {

_reply.recycle();

_data.recycle();

}

return _result;

}

}

static final int TRANSACTION_getPid = (android.os.IBinder.FIRST_CALL_TRANSACTION + 0);

static final int TRANSACTION_getMyData = (android.os.IBinder.FIRST_CALL_TRANSACTION + 1);

}

public int getPid() throws android.os.RemoteException;

public com.yuanhh.appbinderdemo.MyData getMyData() throws android.os.RemoteException;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值