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