AIDL详解 安卓最新AIDL详解!!!!!!!!

目录

AIDL是什么?

AIDL用在哪?

如果现在想要进行进程间通信,应该如何操作?

服务端应该做什么?

客户端做什么?


AIDL是什么?

Android 通信接口定义语言

AIDL用在哪?

两个app进程间通信

如果现在想要进行进程间通信,应该如何操作?

分为客户端和服务端

服务端应该做什么?

1.  定义.aidl文件,定义具体业务的抽象方法
interface ServiceAidlInterface {
    void setname(String name);
    void setmoney(int money);
    String getinfo();
    /**
     * 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);
}

2.  将项目rebuild,系统会自动生成和.aidl文件同名的java文件

3.  创建新的类,让类继承 接口.Stub

    public class SericeImpl extends ServiceAidlInterface.Stub{

        private String name;
        private int money;
        @Override
        public void setname(String name) throws RemoteException {
            this.name=name;
        }

        @Override
        public void setmoney(int money) throws RemoteException {


            this.money=money;
        }

        @Override
        public String getinfo() throws RemoteException {
            Intent intent=new Intent();
            intent.setClass(MyService.this,MainActivity.class);
            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            intent.putExtra("name",name);
            intent.putExtra("money",money);
            startActivity(intent);
            return "你的名字是"+name+"花了"+money+"块";
        }

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

        }
    }

4.  向客户端公开接口,依托于服务

public class MyService extends Service {
    public MyService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        return new SericeImpl();
    }

客户端做什么?

1.  将服务器的.aidl连包一起放入客户端,将项目rebuild

2.  在绑定服务的过程中,发现无法对服务器公开的接口进行连接(API 30)

    <queries>
        <package android:name="com.wzk.serviceapptoo"/>
    </queries>

3.  在Activity中绑定服务

        Intent intent=new Intent();
        intent.setComponent(new ComponentName("com.wzk.serviceapptoo","com.wzk.serviceapptoo.MyService"));

4.绑定服务后,跟服务器开始进行对话

            bindService(intent,conn,BIND_AUTO_CREATE);
                try {
                    serviceAidlInterface.setname("小小");
                    serviceAidlInterface.setmoney(5000);
                    String getinfo = serviceAidlInterface.getinfo();
                    Log.i("服务", "onClick: "+getinfo);
                } catch (RemoteException e) {
                    e.printStackTrace();
                }

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值