當前位置:首頁 > IT技術 > 移動平臺 > 正文

Android常用的IPC通信
2021-10-04 16:40:28

一、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/

開通會員,享受整站包年服務立即開通 >