8.2 Service3
Binder機制
IBinder:1.遠端物件的基本介面,是為了高效能而設計的輕量級遠端呼叫機制的核心部分;
2.該介面定義了與遠端物件間互動的協議,不僅用於遠端呼叫,也用於程式內呼叫;
(是Android給我們提供的一個程式間通訊(IPC)的一個介面(不直接實現),通過繼承Binder類來實現程式間通訊)

Android使用Binder機制來實現程式間的通訊的原因

無需關心底層如何實現,只需按照AIDL的規則,自定義一個介面檔案, 然後呼叫呼叫介面中的方法,就可以完成兩個程式間的通訊。
與訊息,廣播等方式相比,適用於涉及多程式併發情況下的程式間通訊。
AIDL使用詳解
IPC:跨程式通訊(interprocess communication);
AIDL:Binder機制使用的介面語言(Android Interface Definition Language),並非程式語言,只是定義兩個程式間的通訊介面;
注意事項:1.介面名詞需要與aidl檔名相同;
2.介面和方法前面不要加訪問許可權修飾符:public ,private,protected等,也不能用static final;
3.AIDL預設支援的型別包括Java基本型別,String,List,Map,CharSequence;
4.處3以外的其他型別需要import宣告,自定義型別作為引數或者返回值需實現Parcelable介面;
5.自定義型別和AIDL生成的其它介面型別在aidl描述檔案中,應該顯式import,即便在該類和定義的包在同一個包中;
6.非原始型別中,除了String和CharSequence以外,其餘均需要一個方向指示符( in、out、和inout)
in表示由客戶端設定,out表示由服務端設定,inout表示客戶端和服務端都設定了該值;
案例1:簡單資料通訊
服務端:1.main目錄下(與java目錄平級),新建aidl資料夾及檔案(與java主包包名層級一致)

2.建立server端的AIDLService(供clicent端連線呼叫)
(建立IBinder實現類繼承Stub,再返回給Service的onBind方法,使之同時實現IPerson介面和IBinder介面)


客戶端:1.將服務的aidl資料夾拷過來(保持一致);
2.繫結遠端service,通過con轉換IBinder,最後呼叫服務端方法;

案例2:複雜資料通訊
服務端客戶端流程同簡單資料,這裡只演示覆雜資料處理 部分。
1.自定義資料型別並實現序列化;
2.新建該資料型別的aidl檔案;
3.建立業務aidl及service服務
4.client端由於包名與服務端不一致,需修改build.gradle




直接通過Binder的onTransact完成跨程式通訊
服務端:


客戶端:

相關文章
- 8.2 ELMo
- 8.2 模擬賽
- PHP 8.2 更新速覽PHP
- 8.2 快照讀,當前讀
- 8.2 什麼是事件主題事件
- php8.2 redis擴充套件PHPRedis套件
- CentOS 8.2下VNC安裝與配置CentOSVNC
- 【Mysql】Centos8.2 安裝 Mysql 8.0MySqlCentOS
- 上週熱點回顧(7.27-8.2)
- 第八週第二天8.2
- 上週熱點回顧(8.2-8.8)
- Centos-8.2-安裝達夢資料庫CentOS資料庫
- Centos8.2原始碼安裝ffmpeg4.3.1CentOS原始碼
- 8.2日CSP-J初賽內容總結
- 小白搭建ftp伺服器(vsftpd centos8.2)FTP伺服器CentOS
- Python學習之路8.2-對Python類的補充Python
- 《計算機組成與體系結構》——8.2機器指令計算機
- L02-8.2 筆記 記一次查錯經歷筆記
- Linux基礎——BClinux8.2 排查vmcore異常當機問題Linux
- 使用MySQL 8.2透明讀/寫分離,代價幾何?(譯文)MySql
- golang 快速入門 [8.2]-自動型別推斷的祕密Golang型別
- Kettle8.2連線Oracle資料庫失敗解決方法Oracle資料庫
- 2152: 【例8.2】成績 【設定的程式碼塊 是否錯誤】
- 【RECO_ORACLE】NBU 8.2新特性——快速拉起的恢復步驟Oracle
- GO語言————8.2 測試鍵值對是否存在及刪除元素Go
- 8. Oracle日常管理——8.2.DB日常管理——8.2.2. DB空間Oracle
- 8. Oracle日常管理——8.2.DB日常管理——8.2.1. DB日誌Oracle
- G005-OS-INS-02 Red Hat Enterprise Linux V8.2 安裝Linux
- G006-ORACLE-INS-SIFS-01 ORACLE 19C SIFS Ins ON RHEL 8.2Oracle
- vm虛擬機器安裝CentOS8.2伺服器系統虛擬機CentOS伺服器
- REHL8.2斷電導致 generating /run/initramfs/rdsosreport.txt 問題
- Cleaner App Pro for mac(高效的磁碟清理工具) v8.2啟用版APPMac
- OpenSignal:美國三星使用者下載速度比iPhone快8.2 MbpsiPhone
- IDC:預計2022年PC出貨量為3.212 億臺 同比下降8.2%
- 瑞信:預計2021年全球經濟增長5.9% 中國增長8.2%
- 完美世界這款8.2分的克蘇魯題材Rougelike遊戲好玩嗎?遊戲
- Dynamics 365 on-premises9.0版本開放下載,附上8.2升級9.0過程REM
- 如何安裝最新的Vim8.2與Vim外掛管理器vim-plug