码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 没掌握这些知识点也敢说自己熟悉AIDL?


    AIDL介绍

    AIDL全称Android Interface Definition Language 安卓接口定义语言,是Android开发中常用的一种跨进程通信的方式。

    使用AIDL编写的文件是aidl文件,aidl文件在程序运行中并不起作用,起作用的是Android SDK工具基于aidl文件生成的Java语言的IBinder接口。这也意味着,你可以自定义IBinder接口来实现AIDL相同的效果。

    AIDL的使用

    Server端

    创建.aidl文件

    package com.example.android
    
    interface IRemoteService {
    
        void setBookName(String name);
    
        int getBookId();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    AIDL 支持下列数据类型:
    Java基本数据类型(如 int、long、char、boolean 等)、String、CharSequence、List、Map

    实现接口

    创建Binder类的实例,实现aidl中的方法

    private final IRemoteService.Stub binder = new IRemoteService.Stub() {
        public int getBookId(){
            return 1;
        }
        public void setBookName(String aString) {
            // Does nothing
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    向客户端公开接口

    通过Service的onBind方法,向客户端返回Binder对象。

    public class RemoteService extends Service {
        @Override
        public void onCreate() {
            super.onCreate();
        }
    
        @Override
        public IBinder onBind(Intent intent) {
            // Return the interface
            return binder;
        }
    
        private final IRemoteService.Stub binder = new IRemoteService.Stub() {
            public int getBookId(){
                return 1;
            }
            public void setBookName(String aString) {
                // Does nothing
            }
        };
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    Client端

    1. 将客户端的.aidl文件复制到项目中
    2. 声明一个 IBinder 接口实例(基于 AIDL 生成)。
    3. 实现 ServiceConnection。
    4. 调用 Context.bindService(),从而传入您的 ServiceConnection 实现。
    5. 在 onServiceConnected() 实现中,您将收到一个 IBinder 实例(名为 service)。调用 YourInterfaceName.Stub.asInterface((IBinder)service),以将返回的参数转换为 YourInterface 类型。
  • 相关阅读:
    C语言中不透明指针和对象
    HTTPS/HTTP2
    贪吃蛇基础知识铺垫2(c语言)
    让你的Mac体验更便捷,快速启动工具Application Wizard为你助力!
    【Flask使用】全知识md文档,4大部分60页第3篇:状态cookie和session保持
    浅谈智能型电动机保护器在孟加拉水泥厂的应用
    牛客刷题<九>使用子模块实现三输入数的大小比较
    Android中内存泄漏的检测,解决方案以及示例
    【深度学习】深度学习实验二——前馈神经网络解决上述回归、二分类、多分类、激活函数、优化器、正则化、dropout、早停机制
    JAVA 的四种访问权限
  • 原文地址:https://blog.csdn.net/w2_2015/article/details/126718040
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号