zoukankan      html  css  js  c++  java
  • android 跨进程通讯 AIDL

    跨进程如何通讯?两个进程无法直接通讯,通过Android系统底层间接通讯。基于service的aidl实现跨进程通讯。

    什么叫AIDL? Android interface definition language,Android接口定义语言

    什么时候使用?
    AIDL IPC 多线程 多应用

    Binder IPC 没有多线程 多应用

    message IPC 没有多线程

    使用

    eclipse 

    Androidstudio

    new-folder-AIDL Folder 生成AIDL目录

     在目录中 new - AIDL - AIDL FILE 生成,要编译后,才可以调用

    案列

    新建两个app.

    服务端app

    new-folder-AIDL Folder 生成AIDL目录

     在目录中 new - AIDL - AIDL FILE 新建一个aidl文件

    // IMyAidlInterface.aidl
    package com.base.aidl;
    
    // Declare any non-default types here with import statements
    
    interface IMyAidlInterface {
    
            //计算两个数的和
            int add(int num1, int num2);
    
    }

    再提供一个service提供调用

    public class IRemoteService extends Service {
    
        //当客户端绑定这个服务时 会执行
        @Override
        public IBinder onBind(Intent intent) {
            return iBinder;
        }
    
        private IBinder iBinder = new IMyAidlInterface.Stub(){
    
            @Override
            public int add(int num1, int num2) throws RemoteException {
                Log.e("TAG", "收到的数是:"+ num1+","+ num2);
                return num1+num2;
            }
        };
    }

    xml注册

            <service
                android:name=".IRemoteService"
                android:enabled="true" >
                <intent-filter>
                    <action android:name="com.base.aidl.IRemoteService" />
                </intent-filter>
            </service>

    客服端app

    新建一个和服务端一样的AIDL,(包名,名称都要一样)

    activity代码

    public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    
        private EditText eTNum1;
        private EditText eTNum2;
        private EditText eTNum3;
        private IMyAidlInterface iMyAid;
    
    
        private ServiceConnection conn = new ServiceConnection() {
            @Override
            public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
                //绑定成功
                iMyAid = IMyAidlInterface.Stub.asInterface(iBinder);
            }
    
            @Override
            public void onServiceDisconnected(ComponentName componentName) {
                //绑定结束
                iMyAid = null;
            }
        };
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            initView();
    
            //启动绑定
            bindSer();
        }
    
        private void bindSer() {
            Intent intent = new Intent();
            intent.setComponent(new ComponentName("com.base.aidl", "com.base.aidl.IRemoteService"));
            bindService(intent, conn, Context.BIND_AUTO_CREATE);
        }
    
        private void initView() {
    
            eTNum1 = (EditText) findViewById(R.id.ed_num1);
            eTNum2 = (EditText) findViewById(R.id.ed_num2);
            eTNum3 = (EditText) findViewById(R.id.ed_res);
    
            findViewById(R.id.btn_add).setOnClickListener(this);
        }
    
        @Override
        public void onClick(View view) {
            int num1 = Integer.parseInt(eTNum1.getText().toString());
            int num2 = Integer.parseInt(eTNum2.getText().toString());
    
            int num3;
    
            try {
                num3 = iMyAid.add(num1, num2);
                eTNum3.setText(num3 + "");
            } catch (RemoteException e) {
                e.printStackTrace();
                eTNum3.setText("出错了");
            }
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            unbindService(conn);
        }
    }

    布局省略

    AIDL 数据类型

    short不支持

    list要表明 in 或者 out

    parcelable 序列化

  • 相关阅读:
    pcr的简单小脚本
    Q宠大乐斗自动玩
    Docker安装elsearch
    elasticserarch6.5.0百度云资源
    rabbitmq安装
    排序后分组取每个分组的第一条数据
    Lambda表达式的简单使用
    解决SpringBoot总是找不到jsp
    Java强转类型时报错
    iOS内购图文流程(2017)
  • 原文地址:https://www.cnblogs.com/zyandroid/p/5231017.html
Copyright © 2011-2022 走看看