IPC进程通信机制---------AIDL实战

本篇带你揭开AIDL神秘的面纱:相似知识点:Service通信。

IPC,含义为进程间通信或则跨进程通信,是指两个进程之间进行数据交换的过程。

AIDL: Android interface defination language.

适应读者:熟悉Service通信。

Start:
三点关键点:
1、服务端, Service。
2、客户端,Activity。
3、AIDL接口的创建。


第一点:

public class AIDLService extends Service {

    private final String INFO = "我是另外一个进程的数据信息哦";

    @Override
    public void onCreate() {
        super.onCreate();
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    private Binder mBinder = new IMyAidlInterface.Stub(){

        @Override
        public void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat, double aDouble, String aString) throws RemoteException {

        }

        @Override
        public String getInfo() throws RemoteException {
            return INFO;
        }
    };
}


并且在xml文件中,定义Service。



第二点:绑定Service。

/**
 * ServiceConnection 进程间通信的桥梁。
 */
ServiceConnection serviceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        IMyAidlInterface inter = IMyAidlInterface.Stub.asInterface(service);
        try {
            Log.e("MainActivity", "==========================" + inter.getInfo());
        } catch (RemoteException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {

    }
};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);


    Intent intent = new Intent(this, AIDLService.class);
    bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
}





第三点:定义AIDL接口。

interface IMyAidlInterface {
    /**
     * Demonstrates some basic types that you can use as parameters
     * and return values in AIDL.
     */
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);

    String getInfo();
}


补充:
【定义形式,如Java接口定义形式】
【特殊注意:AIDL默认支持,基本类型、String、List、Map类型对象,如果需要传递其他引用类型对象,请查看下一篇文章介绍,本篇秉着简单易懂的形式,带你通过AIDL实现IPC机制。】
【特殊注意:当编写完AIDL接口,在AndroidStudio中,你需要手动Build 当前项目,否则,编译器查询不到.aidl文件。。】









  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HIDL(Hardware Interface Definition Language)是一种用于定义硬件接口的语言,它允许不同的进程之间通过共享内存进行通信。在Android系统中,HIDL被广泛用于实现跨进程的硬件服务。 下面是一个简单的HIDL Service和Java Service共享内存的代码示例: 1. HIDL Service端代码(C++): ```cpp // IMyService.hal package com.example; interface IMyService { int sendData(in vec<uint8_t> data); }; // MyService.cpp #include <android/hidl/manager/1.0/IServiceManager.h> #include <android/hidl/base/1.0/IBase.h> #include <com/example/IMyService.h> using android::hardware::hidl_vec; using com::example::IMyService; class MyService : public IMyService { public: // 实现IMyService接口的sendData方法 int32_t sendData(const hidl_vec<uint8_t>& data) override { // 在这里处理接收到的数据 // ... return 0; } }; int main() { // 注册MyService到HIDL服务管理器 android::sp<IMyService> service = new MyService(); android::hardware::defaultPassthroughServiceImplementation<IMyService>(); android::hardware::joinRpcThreadpool(); return 0; } ``` 2. Java Service端代码: ```java // IMyService.aidl package com.example; interface IMyService { int sendData(byte[] data); } // MyService.java package com.example; import android.os.RemoteException; public class MyService extends IMyService.Stub { // 实现IMyService接口的sendData方法 @Override public int sendData(byte[] data) throws RemoteException { // 在这里处理接收到的数据 // ... return 0; } } ``` 以上是一个简单的HIDL Service和Java Service共享内存的代码示例。在这个示例中,HIDL Service通过实现`IMyService`接口来提供服务,Java Service通过继承`IMyService.Stub`类来实现服务。两者都需要实现`sendData`方法来处理接收到的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值