做一款app需要網站嗎鄭州百度公司地址
aidl類是實現(xiàn)Manager和Service通信的橋梁。
例如在修改Android Wifi功能的時候看到WifiManager管理WifiService;
AIDL是一種android內部進程通信接口的描述語言,通過它我們可以定義進程間的通信接口。
比如onclick(),用oneway修飾,異步調用,監(jiān)聽屏幕點擊,點擊后各種處理后,才會回調到。
aidl的回調可以使用這種:
void registerVolumeCallback(in IBinder binder);
這里的binder則是客戶端在自己程序里面實現(xiàn)接口。如
private final ICarVolumeCallback mVolumeChangeCallback = new ICarVolumeCallback.Stub() {
本身aild的實現(xiàn)就是一個binder,所以可以傳遞進去,然后服務器里面去回調binder.xxx函數(shù)。客戶端去實現(xiàn)這個接口的一些函數(shù)。
注意:in、out、inout,是接收發(fā)送對象的所有數(shù)據(jù),
aidl中onway、in、out、inout關鍵字
1. oneway可以修飾AIDL文件里的方法,oneway修飾的方法在用戶請求相應功能時不需要等待響 ?應可直接調用返回,非阻塞效果,該關鍵字可以用來聲明接口或者聲明方法,如果接口聲明中用到了oneway關鍵字,則該接口聲明的所有方法都采用oneway方式。
oneway代表這個Binder接口是異步調用;
oneway void request();//異步執(zhí)行
同一個binder服務中的oneway方法被多次調用會排隊執(zhí)行;
不同binder服務中的oneway方法被同時調用會同時執(zhí)行;
tips: 一次Binder通信最大可以傳輸多大的數(shù)據(jù)為1M-8K;
binder驅動對于oneway的調用是類似于handler sendmessage那樣的,挨個處理,所以如果服務端的oneway接口處理太慢而客戶端調用太多的話,來不及處理的調用會占滿binder驅動的緩存,導致其他調用拋出transaction failed ;
2. in 由cilent端流向server端,server端可以收到此對象的所有數(shù)據(jù),收到之后會重新創(chuàng)建一個新的對象將數(shù)據(jù)填充進去,因為cilent端和server端是兩個不同的對象,所以server端對數(shù)據(jù)的修改不會影響到client端的對象;
service端對數(shù)據(jù)的改變不會反饋到client端;
非基本數(shù)據(jù)類型和string的參數(shù)類型必須加參數(shù)修飾符, in的意思是只輸入;
3. out 是由server端流向client端,server端實際上不接收client傳入的數(shù)據(jù);在service端自己處理數(shù)據(jù)后結果返回到client端,client接收service端改變的數(shù)據(jù)結果;
4. inout 對象可以雙向流動,即server端能收到cilent發(fā)過來的對象的數(shù)據(jù),server端對此對象的操作也能影響到cilent端;
————————————————
? ? ? ? ? ? ? ? ? ? ? ? ? ? 版權聲明:本文為博主原創(chuàng)文章,遵循 CC 4.0 BY-SA 版權協(xié)議,轉載請附上原文出處鏈接和本聲明。
? ? ? ? ? ? ? ? ? ? ? ??
原文鏈接:https://blog.csdn.net/fengzhiqi1993/article/details/126536035