一、Android中常用的IPC通信
- 管道
- Socket
- 共享內(nèi)存
- 信號
二、管道
管道是一種IPC通信方式,分為有名管道和無名管道,無論是有名管道還是無名管道其原理都是在內(nèi)核開辟一塊緩存空間,這段緩存空間的操作是通過文件讀寫方式進行的。
管道為分半雙工和全雙工:
-
- 半雙工:半雙工管道是單向通信,進程1只能向管道寫數(shù)據(jù),進程2只能從管道讀取數(shù)據(jù)。只有一個代表讀或者寫的FD(文件描述符)。
- 全雙工:全雙工管道是雙向通信,有兩個文件描述符,代表讀和寫。
有名管道與無名管道:
-
- 有名管道:有名管道的通信可以通過管道名進行通信,進程間不需要有關系。
- 無名管道:無名管道就是匿名管道,匿名管道通信的進程必須是父子進程。
半雙工:
? 全雙工:
?
? 在Linux實現(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)絡通信的接口。Socket網(wǎng)絡IPC通信是全雙工的,進程間不需要有關系。
在Android中AMS與Zygote通信采用的Socket通信。
四、共享內(nèi)存
共享內(nèi)存是IPC通信性能最好的方式,進程間通信只需要一次拷貝,適合進程間大數(shù)據(jù)通信。
在Android中應用的Surface與SurfaceFlinger的IPC通信采用的共享內(nèi)存方式實現(xiàn)的。
在Android中共享內(nèi)存有一個工具類MemoryFile。
五、信號
本文摘自 :https://www.cnblogs.com/