博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android中的IPC方式
阅读量:6706 次
发布时间:2019-06-25

本文共 1208 字,大约阅读时间需要 4 分钟。

什么是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

转载于:https://www.cnblogs.com/johnnyzhao/p/10431257.html

你可能感兴趣的文章
漫谈程序猿系列:群星闪耀的黄金时代
查看>>
使用Spring Session做分布式会话管理
查看>>
mongodb的NUMA问题
查看>>
js进阶 12-14 jquery的事件触发函数是哪两个
查看>>
网速4M等于多少KB/S,等于多少kbps
查看>>
MySQL MERGE存储引擎 简介
查看>>
atitit。自己定义uml MOF EMF体系eclipse emf 教程o7t
查看>>
atitit.taskService 任务管理器的设计 v1
查看>>
编写jquery插件的分享
查看>>
机器学习 —— 概率图模型(学习:对数线性模型)
查看>>
2016百度编程题:蘑菇阵
查看>>
解决教学问题新感悟
查看>>
nyoj 37 回文字符串
查看>>
Lintcode--006(交叉字符串)
查看>>
ASP.NET Core 1.0基础之依赖注入
查看>>
Excel里的单元格提行
查看>>
Matlab最短路径问题记录
查看>>
c语言单链表实现
查看>>
tcpdump非常实用的抓包实例
查看>>
ORACLE 日期函数 MONTHS_BETWEEN
查看>>