亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

Android Binder,AIDL使用流程及進程之間的事件分發

標簽:
Android

webp

-w720

前言

我们都知道,在Android中,进程之间的数据是相互隔绝的。于是进程间通行就需要通过IPC(统进程间通信)的方式进行。而Binder就是在Android中IPC的一种方式,关于Binder机制实现的底层原理,因为过于复杂在这就不再表述。下面主要讲解下在Android中通过AIDL实现进程间通信的过程。

概述

在开发项目中,有时候我们会因为内存或者其他一些原因的考虑,把Activity或者服务设置在不同的进程里面,这时候如果我们使用一些事件分发,因为进程的不同,有些地方就接收不到消息。这时候我们会考虑能否先通过IPC先分发至不同的进程,然后再在各自进程中进行分发处理呢。下面我们通过项目来实现及了解AIDL的使用。

GitHub

相关代码请点

webp

-w442

自定义类型创建

在ALDL中,支持的数据类型有如下几种:

byte、char、short、int、long、float、double、boolean、String,CharSequence
List、Map(lsit和map内的类型必须是支aidl的类型)

如果需要支持自定义类型就需要自定义创建。
首先我们在java目录下创建一个.java文件。然后继承Parcelable接口。
建议先进行参数设置,然后通过implement methods添加相关方法实现。

webp

-w720


然后在aidl文件目录下相同包名下创建同名.aidl文件。
ps:注意一定要包名相同,文件名相同。


webp

-w446


然后把aidl文件的内容改成“parcelable name”
ps:注意这里的parcelable都是小写。


webp

-w436

完成后我们自定义类型就可以在AIDL中进行使用了。

引用

自定义类型引用及aidl接口编写。


webp

-w623

在这里要注意的有几点:

编译

当完成上述文件创建后,我们可以通过菜单栏》Build 》Make Project进行编译,编译成功后会在项目下build>generated>aidl>debug>包名路径下生成同名文件。


webp

-w497

调用

然后我们就可以在service中进行调用了。


webp

-w720


通过ITermiteAidlInterface.Stub生成IBinderd对象,并在onBind中进行返回,客户端尽可以通过bind方式进行连接访问。
RemoteCallbackList可以储存存储客户端传过来的回调对象,且不会因为跨进程原因造成对象不一致问题。
至此,AIDL使用方式使用基本完成,服务端编写完成,下面看客户端的调用方式。

AIDL使用

多进程设置

创建两个Activity配置成不同进程


webp

-w714


并在Application初始化时根据不同进程打印日志。


webp

-w657


运行后得到日志证明两个activity在不同进程启动

webp

-w578


webp

-w578

在Activity连接AIDL服务
AIDL数据发送测试

在TwoActivity中通过sendEventMessage()方法发送对象


webp

-w676


观察日志,在两个进程中均接收到了消息回调。


webp

-w602


webp

-w602



作者:午潮山下人
链接:https://www.jianshu.com/p/daed9cf56722


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
205
獲贊與收藏
1011

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消