zoukankan      html  css  js  c++  java
  • binder对于boolean类型的传递

    通过写了一个AIDL文件,查看自动生成的java文件代码得出的结论:

    假如有:  boolean loadNativeSharedLib(String libPathName);

    则对应的binder通信的实际操作为:

    写入:

    @Override public boolean loadNativeSharedLib(java.lang.String libPathName) throws android.os.RemoteException
    {
    android.os.Parcel _data = android.os.Parcel.obtain();
    android.os.Parcel _reply = android.os.Parcel.obtain();
    boolean _result;
    try {
    _data.writeInterfaceToken(DESCRIPTOR);
    _data.writeString(libPathName);
    mRemote.transact(Stub.TRANSACTION_loadNativeSharedLib, _data, _reply, 0);
    _reply.readException();
    _result = (0!=_reply.readInt());
    }
    finally {
    _reply.recycle();
    _data.recycle();
    }
    return _result;
    }

    处理&返回:

    case TRANSACTION_loadNativeSharedLib:
    {
    data.enforceInterface(DESCRIPTOR);
    java.lang.String _arg0;
    _arg0 = data.readString();
    boolean _result = this.loadNativeSharedLib(_arg0);
    reply.writeNoException();
    reply.writeInt(((_result)?(1):(0)));
    return true;
    }

    需要重点关注:


    将boolean转化为int: reply.writeInt(((_result)?(1):(0)));
    将int 还原boolean: _result = (0!=_reply.readInt());

    这是一种简洁有效地方式.

    之所以分析这个,是因为: 1)在native code调用java的service时需要考虑传递序列. 2)不借助aidl工具生成时,也需要手动实现上述两个block的代码
  • 相关阅读:
    mysql
    MySQL主从同步
    python与各数据库的交互
    snmptrap
    web场景的监控
    zabbix的历史数据存储到elasticsearch中
    使用PopupWindow的实现步骤
    使用PopupWindow的实现步骤
    ListView及其ArrayAdapter的应用
    ListView及其ArrayAdapter的应用
  • 原文地址:https://www.cnblogs.com/rainduck/p/3938566.html
Copyright © 2011-2022 走看看