Android AIDL简单使用

AIDL(Android Interface Definition Language)是安卓开发中的一种机制,用于实现跨进程通信(IPC)。在安卓系统中,每个应用程序运行在自己的进程中,如果需要在不同的应用程序之间进行通信,就需要使用IPC机制。AIDL 提供了一种定义接口的方式,使得不同进程间可以进行方法调用和数据传输。


使用方法比较方便,直接在main目录下new一个就可以了:

 新建完之后要build一下,不然没有接口类使用

interface IMyAidlInterface {
    String getString();
    
    void basicTypes(int anInt, long aLong, boolean aBoolean, float aFloat,
            double aDouble, String aString);
}

 接着新创建一个服务,也是new出来(第一张图的Service处)

然后在清单文件将这个Service指定进程:(进程名字自定义,但前面要加个点,不然apk安装不上)

<application

        ...

        <service

            ...

            android:process=".kang">
        </service>

        ...
      
</application>
public class MyService extends Service {

    @Override
    public IBinder onBind(Intent intent) {
        return new MyBind();
    }

    static class MyBind extends IMyAidlInterface.Stub{

        @Override
        public String getString() {
            return "我是AIDL的返回值";
        }

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

        }
    }
}

在Activity中:

public class MainActivity5 extends AppCompatActivity {

    IMyAidlInterface myAidlInterface;  //AIDL

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button btn = findViewById(R.id.button);

        btn.setOnClickListener((v) -> {
            Intent intent = new Intent(this, MyService.class);
            startService(intent);
            bindService(intent, mConnection, BIND_AUTO_CREATE);
        });
    }

    public ServiceConnection mConnection = new ServiceConnection() {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service) {
            myAidlInterface = IMyAidlInterface.Stub.asInterface(service);
            try {
                String str = myAidlInterface.getString();
                Toast.makeText(MainActivity.this, str, Toast.LENGTH_SHORT).show();
            } catch (RemoteException e) {
                e.printStackTrace();
            }
        }
        @Override
        public void onServiceDisconnected(ComponentName name) { }
    };
}

这样在点击按钮后就会启动一个新进程服务,然后通过AIDL进行跨进程通信


AIDL是安卓开发中实现跨进程通信的一种机制,通过定义接口和使用AIDL文件生成的Java类,可以方便地在不同应用程序之间进行方法调用和数据传输。这对于需要将功能模块拆分到不同进程的复杂应用程序或多个应用程序之间的协作非常有用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值