Android之解决aidl里面函数参数太大不能跨进程通信的问题
生活随笔
收集整理的這篇文章主要介紹了
Android之解决aidl里面函数参数太大不能跨进程通信的问题
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
問題:
因為做的截屏拍照是跨進程通信的,所以需要用aidl,但是參數(shù)傳遞用的byte[] image,網(wǎng)上查了下aidl傳遞的基本參數(shù)類型,沒有byte[], 然后把圖片轉(zhuǎn)化成String,結(jié)果時候接受得到有時候接受不到,不知道什么原因,然后其它傳遞參數(shù)又可以與服務(wù)端通信,后來推測,應(yīng)該是aidl傳遞參數(shù)大小有限制。
分析:1、不能把圖片轉(zhuǎn)成字符串,即使能傳過去,也不行。
2、參數(shù)傳遞太大了。
3、可用序列化。
4、先把圖片保存到本地,然后傳圖片的路徑。
aidl中支持的參數(shù)類型為:基本類型(int,long,char,boolean等),String,CharSequence,List,Map,其他類型必須使用import導(dǎo)入,即使它們可能在同一個包里,比如上面的Student,盡管它和IMyService在同一個包中,但是還是需要顯示的import進來。
1.bus工程實現(xiàn)通過service實現(xiàn)aidl實體類
2.actor工程通過發(fā)起bindservice,根據(jù)action去啟動遠程(跨進程的)bus上的aidl。 那么問題來了,我們知道,linux系統(tǒng)進程間通信,各個進程間資源是隔離的,兩個進程間需要通信,就要把msg轉(zhuǎn)換成底層os系統(tǒng)能夠識別的數(shù)據(jù)單元,在Android里面的方案是aidl+parcelbal的序列化。 <總結(jié)
以上是生活随笔為你收集整理的Android之解决aidl里面函数参数太大不能跨进程通信的问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux命令行编辑的快捷键
- 下一篇: Android之系统服务-WindowM