aidl 订阅
AIDL:Android Interface Definition Language,即Android接口定义语言。 展开全文
AIDL:Android Interface Definition Language,即Android接口定义语言。
信息
外文名
Android Interface Definition Language
简    称
aidl
中文名
Android接口定义语言
系    统
Android
aidl什么是AIDL
Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信。为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现。与很多其他的基于RPC的解决方案一样,Android使用一种接口定义语言(Interface Definition Language,IDL)来公开服务的接口。我们知道4个Android应用程序组件中的3个(Activity、BroadcastReceiver和ContentProvider)都可以进行跨进程访问,另外一个Android应用程序组件Service同样可以。因此,可以将这种可以跨进程访问的服务称为AIDL(Android Interface Definition Language)服务。
收起全文
精华内容
参与话题
问答
  • AIDL

    千次阅读 2019-08-17 15:33:32
    AIDL是跨app之间进行通信的语言 ----------------------------------------------app1-------------------------------------------------------------------------- 定义AIDL IMyAidlInterface.aidl 提供接口...

    AIDL是跨app之间进行通信的语言

    ----------------------------------------------app1------------------------------------------------
    定义AIDL
    IMyAidlInterface.aidl 提供接口函数
    IMyAidlInterface2.aidl 提供接口函数

    MainActivity 启动service
    MyService 实现接口
    AndroidManifest.xml 定义服务设置services中action
    ----两套接口----
    IMyAidlInterface.aidl

    package com.example.service;
    interface IMyAidlInterface {
       String pay1();
       int pay2();
       int pay3(int a,int b);
    }
    

    IMyAidlInterface2.aidl

    package com.example.service;
    interface IMyAidlInterface {
       String pay1();
       int pay2();
       int pay3(int a,int b);
    }
    

    MyService

    //绑定后自动返回接口
        public IBinder onBind(Intent intent) {
            if(intent.getAction().equals("service_1")){
                return subx;
            }else if(intent.getAction().equals("service_2")){    
                return subx2;
            }
            return null;
        }
        //实现AIDL中的两套接口
       public  final  Subx subx=new Subx();
        public class Subx extends IMyAidlInterface.Stub{
            public String pay1(){
                    String str="我是服务";
                    return str;
            }
            public int  pay2(){
                    return 123456;
            }
            public int  pay3(int a,int b){
                    return a-b;
            }
        }
        public final Subx2 subx2=new Subx2();
        public class Subx2 extends IMyAidlInterface2.Stub{
            public String fun1(){
                String str="我是服务2";
                return str;
            }
        }
    

    AndroidManifest.xml
    设置service中action

           <service
                android:name=".MyService"
                android:enabled="true"
                android:exported="true">
                <intent-filter>
                    <action android:name="service_1"/>
                    <action android:name="service_2"/>
                </intent-filter>>
            </service>
    

    MainActivity
    Intent intent=new Intent(MainActivity.this,MyService.class);
    startService(intent);
    -----------------------------------------------------------------app2---------------------------------------------
    将app1中生成好的AIDl文件拷贝到自己的文件夹中,记得拷贝的路径要相同,拷贝过来后在编译一遍
    MainActivity

    //定义两套接口
        IMyAidlInterface iMyAidlInterface=null;
        IMyAidlInterface2 iMyAidlInterface2=null;
        //设置连接1
       ServiceConnection conn=new ServiceConnection() {
           	//当绑定成服务功后会自动调用此函数
            public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
                            iMyAidlInterface=IMyAidlInterface.Stub.asInterface(iBinder);
                            System.out.println("----    链接成功1    ----");
            }
            public void onServiceDisconnected(ComponentName componentName) {
    
            }
        };
        //设置连接2
        ServiceConnection conn2=new ServiceConnection() {
             	//当绑定服务成功后会自动调用此函数
            public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
                iMyAidlInterface2=IMyAidlInterface2.Stub.asInterface(iBinder);
                System.out.println("----    链接成功2    ----");
            }
            public void onServiceDisconnected(ComponentName componentName) {
            }
        };
    --------------------------------------------------------------------------------------------------
    //绑定service_1     intent设定被绑定者的包名和action
               		Intent intent=new Intent();
                    intent.setAction("service_1");
                    intent.setPackage("com.example.service");
                    bindService(intent,conn, Context.BIND_AUTO_CREATE);
    //绑定service_2      intent设定被绑定者的包名和action
    				Intent intent=new Intent();
                    intent.setPackage("com.example.service");
                    intent.setAction("service_2");
                    bindService(intent,conn2,Context.BIND_AUTO_CREATE);
    ------------------------------------------------------------------------------------------------------
    //获取接口1
                  try {
                        String str = iMyAidlInterface.pay1();
                        System.out.println("收到: "+str);
                    }catch (RemoteException e){
                        e.printStackTrace();
                    }
                    try {
                        int a=iMyAidlInterface.pay2();
                        System.out.println("收到: "+a);
                    }catch (RemoteException e1){
                        e1.printStackTrace();
                    }
                    try{
                        int c=iMyAidlInterface.pay3(12,2);
                        System.out.println("收到: "+c);
                    }catch (RemoteException e2){
                        e2.printStackTrace();
                    }
                }
     //获取接口2
                 try{
                        String str=iMyAidlInterface2.fun1();
                        System.out.println("接受到服务2消息:"+str);
                    }catch (RemoteException e){
                        e.printStackTrace();
                    }
    
    展开全文
  • aidl

    2018-09-06 16:32:05
    https://blog.csdn.net/u011240877/article/details/72765136
    展开全文
  • Aidl

    2017-08-16 11:16:12
    安卓接口定义语言 ...可以在 a工程 中, 创建一个 aidl文件,在里面定义接口,然后 生成gen 目录下 会自动生成 一个 .java文件。  然后 定义自己的 服务类, 在这个服务类 里 ,定义一个内

     韩梦飞沙  韩亚飞  313134555@qq.com  yue31313  han_meng_fei_sha

    安卓接口定义语言

    例如 a进程 要与 b进程中的 服务 实现通信。

    可以在 a工程 中, 创建一个 aidl文件,在里面定义接口,然后 生成gen 目录下 会自动生成 一个 .java文件。 


    然后 定义自己的 服务类, 在这个服务类 里 ,定义一个内部类,继承 这个  xxx.stub 这个内部类  xxx是根据 adil文件文件名。 这个stub内部类 实际就是 之前 生成的.java文件中所包含的一个内部类。

    在 我们定义的这个内部类中  在它的 在绑定时候 方法 中 返回  这个内部类 对象, 系统会自动将这个对象 封装成  接口绑定器IBinder对象 ,传递给它的调用者。


    然后 在 清单文件中 配置 服务类,

    在这个服务类 下 添加  动作action  安卓:name=“xxxx”      ,xxxx就是 adil的包路径加它的文件名 ,指明了这个名字,  b进程  就能找到它 ,实现通信。


    在b工程中: 把a工程中的 自动生成的.java文件 复制到 b工程里,  在绑定服务方法中 将 上面指明的那个名字 作为 意图的 动作 参数。


    b工程中 要创建相应的包,保证 自动生成的.java文件的 包名 正确。


    展开全文

空空如也

1 2 3 4 5 ... 20
收藏数 12,160
精华内容 4,864
关键字:

aidl