IPC机制总结
IPC机制:
1. 多进程概念;
2. 序列化机制和Binder;
3. 进程间通信:Bundle、文件共享、AIDL、Messenger、ContentProvider、Socket;
操作系统的设计,因此可以归结为三点:
(1)以多进程形式,允许多个任务同时运行;
(2)以多线程形式,允许单个任务分成不同的部分运行;
(3)提供协调机制,一方面防止进程之间和线程之间产生冲突,另一方面允许进程之间和线程之间共享资源。
进程和线程的区别:
进程和线程都是一个时间段的描述,是CPU工作时间段的描述。
进程是cpu资源分配的最小单位,线程是cpu调度的最小单位。是系统进行资源分配和调度的一个独立单位,包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文。
线程是进程的一个实体,是CPU调度和分派的基本单位,是比进程更小的能独立运行的基本单位。自己基本上不拥有系统资源,只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源。
一个变量保存在内存中,CPU访问时将变量放入寄存器,读写完毕后再放回内存;
线程同步可使用关键字:Synchronized关键字修改函数或者一段代码;
线程死锁:
两个线程需要同时访问两个共享资源时,常常会出现这种问题;
在Android系统中,可以使用 “kill -3 <pid>” 来检查应用中死锁的线程;
命令提示符是“#”,而不是“$”,说明当前是用root用户权限操作shell
Android中的多进程:
一个应用内使用多进程:给四大组件在AndroidManifest中指定android:process属性
运行在不同进程中的组件是属于不同的虚拟机和Application的,即不同进程的组件会拥有独立的虚拟机、Application以及内存空间;
IPC基础概念:
1. Serializable接口
手动指定serialVersionUID的值,或让Eclipse根据当前类的结构自动生成它的hash值
静态成员变量不属于对象,只属于类,所以不参与序列化过程;
用transient关键字标记的成员变量不参与序列化过程;
2. Parcelable接口
完成对象的序列化,当需要通过Intent和Binder传输数据,或将对象持久化到存储设备上,或通过网络传输给其他客户端,
都需要使用Parcelable或Serializable;
系统提供了许多实现了Parcelable接口的类,它们都是可以直接序列化,如Intent、Bundle、Bitmap等;
区别:
Serializable是Java的序列化接口,使用简单,开销大,序列化和反序列号需要大量I/O操作;
Parcelable是Android的序列化接口,使用麻烦,效率高,推荐该方法。
通常,将对象持久化到存储设备上,或通过网络传输给其他客户端过程稍显复杂,建议使用Serializable。
3. Binder
AIDL文件的本质:是系统为我们提供了一种快速实现Binder的工具
Android中的IPC方式:
1. Bundle
2. 文件共享:
由于Android系统基于Linux,使得其并发读/写文件可以没有限制地进行,
适合在对数据同步要求不高的进程之间进行通信;
SharedPreferences: 是个特例,高并发时很大几率丢失数据,不建议进程间通信使用;
3. Messenger:
一种轻量级的IPC方案,底层实现是AIDL,在进程间传递Message对象;
以串行的方式处理客户端发来的消息,一次处理一个请求,因此在服务端不用考虑线程同步问题;
若大量并发请求,则Messenger不合适;
4. AIDL:
CopyOnWriteArrayList线程同步的List,支持并发读/写,非ArrayList
对象不能跨进程传输,使用RemoteCallbackList
观察者模式
RemoteCallbackList 是系统专门提供的用于删除跨进程的listener接口
权限认证的两种方法
5. ContentProvider:
不同应用间数据共享,底层实现也是Binder
ContentResolver的query、update、insert、delete
对底层的数据存储方式没有任何要求,可以使用SQLite数据库、普通文件、或内存中的一个对象来进行数据的存储
Activity ---- ContentResolver ---- ContentProvider ----- SQLiteOpenHelper
6. Socket:
流式套接字----TCP协议(面向连接的协议,提供稳定的双向通信功能,建立经过“三次握手”,超时重传机制)
用户数据报套接字----UDP协议(无连接的协议,提供不稳定的通信功能,性能上具有更好的效率,确定是不保证数据一定能够正确传输)
IPC机制总结的更多相关文章
- Anciroid的IPC机制-Binder概述
在Linux系统中,是以进程为单位分配和管理资源的.出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭.但是,在一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项 ...
- Handler消息机制与Binder IPC机制完全解析
1.Handler消息机制 序列 文章 0 Android消息机制-Handler(framework篇) 1 Android消息机制-Handler(native篇) 2 Android消息机制-H ...
- ndk学习15: IPC机制
Linux IPC机制 来自为知笔记(Wiz)
- Android之IPC机制
Android IPC简介 任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来实现IPC,还 ...
- IPC机制--Binder
文章来自 Android技术内幕 系统卷 转:http://www.linuxidc.com/Linux/2011-08/40508.htm 什么是IPC机制以及IPC机制的种类 在Linux中,是以 ...
- IPC机制
转:http://blog.chinaunix.net/uid-26125381-id-3206237.html IPC 三种通信机制 2012-05-13 17:23:55 最近看了,IPC三种通 ...
- IPC 机制简介
IPC 机制简介 概述 在Unix早期发展中,做出重大贡献的两大主力Bell实验室和伯克利大学(BSD)在IPC(InterProcess Communication)方面的侧重点有所不同.前者对Un ...
- pipe()管道最基本的IPC机制
<h4>进程间通信 fork pipe pie_t 等用法(管道机制 通信)</h4>每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之 ...
- Android的IPC机制(一)——AIDL的使用
综述 IPC(interprocess communication)是指进程间通信,也就是在两个进程间进行数据交互.不同的操作系统都有他们自己的一套IPC机制.例如在Linux操作系统中可以通过管道. ...
- [置顶] 深入理解android之IPC机制与Binder框架
[android之IPC机制与Binder框架] [Binder框架.Parcel.Proxy-Stub以及AIDL] Abstract [每个平台都会有自己一套跨进程的IPC机制,让不同进程里的两个 ...
随机推荐
- springboot jpa 级联操作及测试问题 (@Transactional与@Test)
前言:测试springboot版本 :springBootVersion = '2.0.5.RELEASE' 一 :搬运@Transactional B. 如果加了事务,必须做好开发环境测试( ...
- Winsows10-1909正式版原版下载资料
[简体中文版] 一.win10 1909消费者版(零售版),含家庭版.家庭单语言版.教育版.专业版.专业教育版.专业工作站版 (6个版本) 1.64位系统:Windows 10 (consumer e ...
- 普通ACL访问控制列表
配置OSPF R1: R2: R3: R4: 在R1上查看OSPF的学习 测试R1与R4环回接口连通性 配置普通ACL访问控制列表: 先在R4配置密码用R1与R4建立telnet建立 密码huawei ...
- 如何配置JedisPool的参数
转自:http://blog.csdn.net/huahuagongzi99999/article/details/13631579 如何配置Pool的参数 JedisPool的配置参数很大程度上依赖 ...
- [Linux] 013 其他文件搜索命令
1. 文件搜索命令:locate 命令名称:locate 命令所在路径:/bin/locate 执行权限:所有用户 语法:locate 文件名 功能描述:在文件资料库中查找文件 范例: $ locat ...
- 《剑指offer》面试题3 二维数组中的查找 Java版
(二维数组,每行递增,每列递增.输入二维数组和一个整数,判断数组中是否含有此数.) 我的方法:拿到题目,根据题目条件我提取出这样一个特性:一个数的右边和下面的数都比它大.于是就可以写出一种递归的方法: ...
- PEP8规范总结
PEP8规范总结 代码编排 1 缩进.4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格. 2 每行最大长度79,换行可以使用反斜杠,最好使用圆括号.换行点要在操作符的 ...
- IntelliJ IDEA 中 Ctrl+Alt+Left/Right 失效
开发工具:Idea OS:Window 7 在idea中使用ctrl+b跟踪进入函数之后,每次返回都不知道用什么快捷键,在idea中使用ctrl+alt+方向键首先会出现与win7屏幕方向的快捷键冲突 ...
- spring boot整合redis多实例
最近项目中遇到需要连接两个redis实例的情况,于是就在spring boot原先的基础上修改了一点. 首先,添加所需的依赖 <dependency> <groupId>org ...
- PCA算法和实例
PCA算法 算法步骤: 假设有m条n维数据. 1. 将原始数据按列组成n行m列矩阵X 2. 将X的每一行(代表一个属性字段)进行零均值化,即减去这一行的均值 3. 求出协方差矩阵C=1/mXXT 4. ...