| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 移动开发 -> Android IPC 之 AIDL 使用,我三年开发经验从字节跳动抖音离职后 -> 正文阅读 |
|
[移动开发]Android IPC 之 AIDL 使用,我三年开发经验从字节跳动抖音离职后 |
{ return?this; } @Override?public?boolean?onTransact(int?code,?android.os.Parcel?data,?android.os.Parcel?reply,?int?flags)?throws?android.os.RemoteException { … } private?static?class?Proxy?implements?com.scc.demo.ipc.IUserInterface { … } static?final?int?TRANSACTION_basicTypes?=?(android.os.IBinder.FIRST_CALL_TRANSACTION?+?0); public?static?boolean?setDefaultImpl(com.scc.demo.ipc.IUserInterface?impl)?{ … } public?static?com.scc.demo.ipc.IUserInterface?getDefaultImpl()?{ return?Stub.Proxy.sDefaultImpl; } } /** *?Demonstrates?some?basic?types?that?you?can?use?as?parameters *?and?return?values?in?AIDL. */ public?void?basicTypes(int?anInt,?long?aLong,?boolean?aBoolean,?float?aFloat,?double?aDouble,?java.lang.String?aString)?throws?android.os.RemoteException; } 💥 向客户端公开接口 既然你服务端的接口已经定义好了,那就公开给客户端。要不客户端怎么调用。 public?class?AIDLService?extends?Service?{ @Nullable @Override public?IBinder?onBind(Intent?intent)?{ //返回你的接口 return?stub; } private?IUserInterface.Stub?stub?=?new?IUserInterface.Stub()?{ @Override public?void?basicTypes(int?anInt,?long?aLong,?boolean?aBoolean,?float?aFloat,?double?aDouble,?String?aString)?throws?RemoteException?{ //你的逻辑 } }; } 好了,解释完了。上手搞。 🔥 实例 ===== 💥 User.java 创建一个实例并进行序列化。具体过程就不描述了。 public?class?User?implements?Parcelable?{ String?name; int?age; … } 💥 IUserInterface.aidl //?IUserInterface.aidl package?com.scc.demo.ipc; //?Declare?any?non-default?types?here?with?import?statements parcelable?User; interface?IUserInterface?{ /** *?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); void?setUser(in?User?user); User?getUser(); } 💥 AIDLService.java public?class?AIDLService?extends?Service?{ @Nullable @Override public?IBinder?onBind(Intent?intent)?{ //返回你的接口 return?stub; } private?IUserInterface.Stub?stub?=?new?IUserInterface.Stub()?{ User?user?=?null; @Override public?void?basicTypes(int?anInt,?long?aLong,?boolean?aBoolean,?float?aFloat,?double?aDouble,?String?aString)?throws?RemoteException?{ } @Override public?void?setUser(User?user)?throws?RemoteException?{ this.user?=?user; MLog.e(“AIDLService:”+user.toString()); } @Override public?User?getUser()?throws?RemoteException?{ return?user; } }; } 别忘记在AndroidMainfest.xml中声明一下。 💥 MainActivity public?class?MainActivity?extends?ActivityBase?implements?View.OnClickListener?{ IUserInterface?iUserInterface?; @Override public?void?onCreate(@Nullable?Bundle?savedInstanceState)?{ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); … } ServiceConnection?connectionAidl?=?new?ServiceConnection()?{ @Override public?void?onServiceConnected(ComponentName?name,?IBinder?service)?{ iUserInterface?=?IUserInterface.Stub.asInterface(service); } @Override public?void?onServiceDisconnected(ComponentName?name)?{ bound?=?false; } }; @Override protected?void?onStop()?{ super.onStop(); if?(bound)?{ unbindService(connectionAidl); bound?=?false; } } @Override public?void?onClick(View?v)?{ switch?(v.getId())?{ case?R.id.btn_bind_service: bindService(new?Intent(MainActivity.this,?AIDLService.class),connectionAidl,?Context.BIND_AUTO_CREATE); break; case?R.id.btn_setuser: try?{ iUserInterface.setUser(new?User(“Scc”,15)); 学习分享在当下这个信息共享的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了 很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘 如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。 2021最新上万页的大厂面试真题 七大模块学习资料:如NDK模块开发、Android框架体系架构… 只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。
不知道如何进阶更进一步,比较迷茫。
|
|
移动开发 最新文章 |
Vue3装载axios和element-ui |
android adb cmd |
【xcode】Xcode常用快捷键与技巧 |
Android开发中的线程池使用 |
Java 和 Android 的 Base64 |
Android 测试文字编码格式 |
微信小程序支付 |
安卓权限记录 |
知乎之自动养号 |
【Android Jetpack】DataStore |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/24 13:46:03- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |