一、Android中常用的IPC通信
- 管道
- Socket
- 共享內(nèi)存
- 信號(hào)
二、管道
管道是一種IPC通信方式,分為有名管道和無(wú)名管道,無(wú)論是有名管道還是無(wú)名管道其原理都是在內(nèi)核開(kāi)辟一塊緩存空間,這段緩存空間的操作是通過(guò)文件讀寫方式進(jìn)行的。
管道為分半雙工和全雙工:
-
- 半雙工:半雙工管道是單向通信,進(jìn)程1只能向管道寫數(shù)據(jù),進(jìn)程2只能從管道讀取數(shù)據(jù)。只有一個(gè)代表讀或者寫的FD(文件描述符)。
- 全雙工:全雙工管道是雙向通信,有兩個(gè)文件描述符,代表讀和寫。
有名管道與無(wú)名管道:
-
- 有名管道:有名管道的通信可以通過(guò)管道名進(jìn)行通信,進(jìn)程間不需要有關(guān)系。
- 無(wú)名管道:無(wú)名管道就是匿名管道,匿名管道通信的進(jìn)程必須是父子進(jìn)程。
半雙工:
? 全雙工:
?
? 在Linux實(shí)現(xiàn)pipe:
public static void main(String[] args) { int fd[2]; char buffer[SIZE]; pipe(fd); pid_t pid = fork(); if (pid == 0) { close(fd[1]); read(fd(0), buffer, SIZE); } else if (pid > 0) { close(fd[0]); write(fd[1], "Hello", 5); } }
?
三、Socket
Socket提供一套網(wǎng)絡(luò)通信的接口。Socket網(wǎng)絡(luò)IPC通信是全雙工的,進(jìn)程間不需要有關(guān)系。
在Android中AMS與Zygote通信采用的Socket通信。
四、共享內(nèi)存
共享內(nèi)存是IPC通信性能最好的方式,進(jìn)程間通信只需要一次拷貝,適合進(jìn)程間大數(shù)據(jù)通信。
在Android中應(yīng)用的Surface與SurfaceFlinger的IPC通信采用的共享內(nèi)存方式實(shí)現(xiàn)的。
在Android中共享內(nèi)存有一個(gè)工具類MemoryFile。
五、信號(hào)
本文摘自 :https://www.cnblogs.com/