導航:首頁 > 數據處理 > aidl數據傳不過來怎麼辦

aidl數據傳不過來怎麼辦

發布時間:2024-10-28 15:00:35

1. Android:AIDL進程間通信基本框架

在某些業務場景下,我們需要在應用中單獨開啟一個進程進行一些操作。比如性能監控,如果讓原始業務和性能監控本身的業務跑在同一個進程下,那麼就會導致性能統計的數據的失真。

而進程間通信,一般採用AIDL機制的客戶端與服務端通信。

AIDL只能傳遞如下幾類數據:

當傳遞自定義 Parcelable 時,有三處地方需要注意:

當傳遞其他 aidl 介面時,同樣必須要 import 這個 aidl 文件

編寫完 aidl 文件後,make一下工程,會在 build 下的 generated 下的 source 下的 aidl 目錄生成對應的介面類文件。aidl 介面其實就是 API 介面,通過實現對應介面類的 Stub 子類來實現具體的 API 邏輯;通過對應介面類的 Stub 子類的 asInterface 方法得到具體的實現類,調用具體的 API 方法。

一個基本的客戶端服務端的通信結構一般包括如下功能

客戶端的功能

服務端的功能

客戶端的相關功能實現比較簡單,麻煩的是服務端的功能。因為 AIDL 介面定義的都是服務端的介面,是由客戶端來調用的。而想要實現服務端反向調用客戶端則需要通過其他手段實現。

想要實現服務端主動連接客戶端,最好的辦法就是 服務端發送廣播,客戶端收到廣播後再主動連接服務端 ,通過這種方式變相地實現服務端主動連接客戶端的功能

想要實現服務端主動斷開客戶端,除了上面 發送廣播是一種實現方式外,還可以通過 android 的系統API RemoteCallbackList,用包名作為key值來注冊遠程回調介面的方式,讓服務端持有客戶端的回調介面,服務端調用回調介面,客戶端在回調介面中實現主動斷開服務端 ,通過這種方式變數地實現服務端主動斷開客戶端的功能。而採用後者會顯得更加優雅

既然所有的操作歸根結底都是由客戶端來完成的,那麼客戶端必須得有如下的功能模塊:

服務端必須得有的功能模塊:

那麼,整體的通信流程就是如下的步驟:

首先是通信的 aidl 介面定義

然後是客戶端的連接操作與斷開連接操作,包括廣播接收者的注冊以及回調介面的實現

然後是客戶端的拉取數據和推送數據操作

接著是服務端的 iBinder 介面的實現,完成回調介面的注冊、業務子線程的開啟和關閉、數據的推送和數據的拉取操作

然後是服務端的主動連接和主動斷開連接操作

最後是服務端的 onUnbind 方法的實現,對回調介面進行反注冊

服務端模仿 FloatViewPlugin 自定義插件,實現 IServicePlugin 介面,定製個性化的懸浮窗插件

客戶端在 Appliaction 的 onCreate方法中初始化

在 MainActivity 上實現連接、斷開、數據通信

閱讀全文

與aidl數據傳不過來怎麼辦相關的資料

熱點內容
造價信息和定額按照哪個計算 瀏覽:407
數據中心低壓開關櫃一般是多少a 瀏覽:175
北京省級報社哪個刊登信息便宜 瀏覽:785
三項數據如何對比記憶 瀏覽:953
交易記錄軟體哪個最好 瀏覽:862
安徽餐飲公司財務代理怎麼樣 瀏覽:104
兒童漆如何代理 瀏覽:325
產品經理如何和研發溝通 瀏覽:963
如何將一台手機的數據換到另一台 瀏覽:792
萬能小程序在哪裡找 瀏覽:103
智能科學與技術主要研究什麼 瀏覽:513
英文文獻檢索一般使用哪個資料庫 瀏覽:253
崇州淘寶賣什麼產品比較火 瀏覽:740
2021青島職業技術學院學費多少 瀏覽:608
數字經濟以什麼為代表的信息技術 瀏覽:369
bter交易怎麼收取費用 瀏覽:180
如何查看已報名完畢的高考信息 瀏覽:240
幼兒園老師沒回信息在忙什麼 瀏覽:930
jsp技術怎麼寫查重率低 瀏覽:177
ie彈窗阻止程序是什麼意思 瀏覽:533