AIDL使用(一)

IPC的含义是指进程间通信或者跨进程通信,是两个进程之间进行数据的交流,AIDL就是其中一种方式,趁着今天星期六有空闲时间,就学习了一下,顺便做一下笔记。
这分为服务端和客户端两部分,服务器端创建一个Service,接着在客户端绑定这个服务,从而实现通信交互。
根据官方给出的文档,我们需要以下三步:

  • 创建aidl文件
  • 实现这个接口
  • 把这个接口暴露给客户端

  • 创建aidl文件
    在自己的项目右击->New->Folder->AIDL File,在自己新建的AIDL文件里面,New一个AIDL,如下
package com.example.xing.aidldemo;

// Declare any non-default types here with import statements

interface IMyAIDL {
    //自己定义的一个方法
   int add(int num1,int num2);
}
  • 实现这个接口

    private IBinder iBinder = new IMyAIDL.Stub(){
        @Override
        public int add(int num1,int num2) throws RemoteException {
            Log.d("TAG","收到远程的请求");
            return num1+num2;
        }
    };
  • 把接口暴露给客户端
public class IRemoteService extends Service {

    /**
     * 绑定时会执行
     * @param intent
     * @return
     */
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return iBinder;
    }

    private IBinder iBinder = new IMyAIDL.Stub(){
        @Override
        public int add(int num1, int num2) throws RemoteException {
            Log.d("TAG","收到远程的请求");
            return num1+num2;
        }
    };
}

在onBind中返回的iBinder,其实就是第二步中我们实现的接口,当客户端绑定service的时候,就返回iBinder,客户端通过这个iBinder就可以操作aidl接口了。
通过以上几步,AIDL的服务器就基本完成了。

现在到客户端的实现
  1. 创建跟服务器一样的aidl文件,包名和类名也保持一致

    这个是服务端:
    这里写图片描述

    这个是客户端:
    这里写图片描述

2.绑定服务器

private ServiceConnection conn = new ServiceConnection(){

        //绑定上服务的时候
        @Override
        public void onServiceConnected(ComponentName componentName, IBinder iBinder) {
            //拿到远程的服务
            iMyAidl = IMyAIDL.Stub.asInterface(iBinder);
        }

        //当服务断开的时候
        @Override
        public void onServiceDisconnected(ComponentName componentName) {
            //回收资源
            iMyAidl = null;
        }
    };

private void bindService() {
        //获取服务端
        Intent intent = new Intent();
        //新版本必须显式Intent启动绑定服务
        intent.setComponent(new ComponentName("com.example.xing.aidldemo","com.example.xing.aidldemo.IRemoteService"));

        bindService(intent,conn, Context.BIND_AUTO_CREATE);
    }

在onServiceConnected中,
IMyAIDL.Stub.asInterface(iBinder)返回的就是一个aidl接口,拿到这个接口之后,就可以调用接口里面定义的方法,例如我们之前定义的add(num1,num2).

最后注意

  • 在服务器端注册声明service的时候,要加上这两句:
    android:exported=”true”
    android:process=”:remote”,
    否则就呵呵了!
  • 在启动客户端之前,必须先启动服务端。
  • 这个是在网上视频学习之后写,其实就是理顺一下视频的内容而已,重述一次如何使用而已!
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园的建设目标是通过数据整合、全面共享,实现校园内教学、科研、管理、服务流程的数字化、信息化、智能化和多媒体化,以提高资源利用率和管理效率,确保校园安全。 智慧校园的建设思路包括构建统一支撑平台、建立完善管理体系、大数据辅助决策和建设校园智慧环境。通过云架构的数据中心与智慧的学习、办公环境,实现日常教学活动、资源建设情况、学业水平情况的全面统计和分析,为决策提供辅助。此外,智慧校园还涵盖了多媒体教学、智慧录播、电子图书馆、VR教室等多种教学模式,以及校园网络、智慧班牌、校园广播等教务管理功能,旨在提升教学品质和管理水平。 智慧校园的详细方案设计进一步细化了教学、教务、安防和运维等多个方面的应用。例如,在智慧教学领域,通过多媒体教学、智慧录播、电子图书馆等技术,实现教学资源的共享和教学模式的创新。在智慧教务方面,校园网络、考场监控、智慧班牌等系统为校园管理提供了便捷和高效。智慧安防系统包括视频监控、一键报警、阳光厨房等,确保校园安全。智慧运维则通过综合管理平台、设备管理、能效管理和资产管理,实现校园设施的智能化管理。 智慧校园的优势和价值体现在个性化互动的智慧教学、协同高效的校园管理、无处不在的校园学习、全面感知的校园环境和轻松便捷的校园生活等方面。通过智慧校园的建设,可以促进教育资源的均衡化,提高教育质量和管理效率,同时保障校园安全和提升师生的学习体验。 总之,智慧校园解决方案通过整合现代信息技术,如云计算、大数据、物联网和人工智能,为教育行业带来了革命性的变革。它不仅提高了教育的质量和效率,还为师生创造了一个更加安全、便捷和富有智慧的学习与生活环境。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值