Android常用的IPC通信

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

五、信号

posted @ 2021-10-04 15:49  naray  阅读(339)  评论(0编辑  收藏  举报