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