zoukankan      html  css  js  c++  java
  • Android中的IPC方式

    什么是IPC?

    IPC是Inter-Process Communication的缩写,含义就是进程间通信或者跨进程通信,是指两个进程之间进行数据交换的过程。那什么是进程,什么是线程,进程和线程是两个截然不同的概念。在操作系统中,线程是cpu调度的最小单元,同时线程是一种有限的系统资源。而进程指的一个执行单元,在pc和移动设备上指的是一个程序或一个应用。一个进程可以包含多个线程,因此进程和线程是包含被包含的关系,最简单情况下,一个进程可以只有一个线程,即主线程,在Android里面也叫UI线程,在UI线程里才能操作界面元素。

    为什么要使用IPC?

    • 要在不同应用间进行通信,android系统中每个应用是运行在独立的进程中;
    • 运行在不同进程间四大组件,如果他们想要通过内存来共享数据,这样都会失败的,为什么?

      如果某个进程向共享内存中写入数据,所做的改动将立即影响到可以访问同一段共享内存的任何其他进程,但共享内存并没有提供同步机制,也就是说,在第一个进程结束对共享内存的写操作之前,并无自动机制可以阻止第二个进程开始对它进行读取,这也是多进程所带来的主要影响。

      正常情况下,四大组件中间不可能不通过一些中间层来共享数据,那么通过简单地指定进程名来开启多进程都会无法正确运行。一般来说,使用多进程会造成如下几方面的问题:

    • 静态成员和单例模式完全失效
    • 线程同步机制完全失效
    • SharedPreferences的可靠性下降
    • Application会多次创建

      为了解决这个问题,我们就要使系统提供的IPC方法。

      Binder
      直观来说,Binder是Android中的一个类,它实现了IBinder接口。从IPC角度来说,Binder是Android中的一种跨进程通信方式,Binder还可以理解为一种虚拟的物理设备,它的设备驱动是/dev/binder,该通信方式在Linux中没有。

      从Android Framework角度来说,Binder是ServiceManager连接各种Manager(ActivityManager、WindowManager等等)和相应ManagerService的桥梁。从Android应用层来说,Binder是客户端和服务端进行通信的媒介,当bindService的时候,服务端会返回一个包含了服务端业务调用的Binder对象,通过Binder对象,客户端就可以获取服务端提供的服务或者数据,这里的服务包括普通服务和基于AIDL的服务。

      为什么要用Binder?

      //todo..  

    Android中的IPC方式

    • 使用Bundler
    • 使用文件共享
    • 使用Messanger
    • 使用AIDL
    • 使用ContentProvider
    • 使用Socket

  • 相关阅读:
    关于Ext tabpanel 自定义active 样式/iconCls
    关于vue使用 npm run dev报错原因
    vue学习笔记(1)
    BeanCreationNotAllowedException: Error creating bean with name 'cxf' 的原因和解决方案
    js做四则运算时,精度丢失问题及解决方法
    java word/doc/docx文档转PDF 加水印
    HTML学习笔记
    (小白疑问求大神解答)可否理解为数据库就是excel表格的封装?
    excel表格加减法
    基础算法思想
  • 原文地址:https://www.cnblogs.com/johnnyzhao/p/10431257.html
Copyright © 2011-2022 走看看