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机制总结的更多相关文章

  1. Anciroid的IPC机制-Binder概述

    在Linux系统中,是以进程为单位分配和管理资源的.出于保护机制,一个进程不能直接访问另一个进程的资源,也就是说,进程之间互相封闭.但是,在一个复杂的应用系统中,通常会使用多个相关的进程来共同完成一项 ...

  2. Handler消息机制与Binder IPC机制完全解析

    1.Handler消息机制 序列 文章 0 Android消息机制-Handler(framework篇) 1 Android消息机制-Handler(native篇) 2 Android消息机制-H ...

  3. ndk学习15: IPC机制

    Linux IPC机制 来自为知笔记(Wiz)

  4. Android之IPC机制

    Android IPC简介 任何一个操作系统都需要有相应的IPC机制,Linux上可以通过命名通道.共享内存.信号量等来进行进程间通信.Android系统不仅可以使用了Binder机制来实现IPC,还 ...

  5. IPC机制--Binder

    文章来自 Android技术内幕 系统卷 转:http://www.linuxidc.com/Linux/2011-08/40508.htm 什么是IPC机制以及IPC机制的种类 在Linux中,是以 ...

  6. IPC机制

    转:http://blog.chinaunix.net/uid-26125381-id-3206237.html  IPC 三种通信机制 2012-05-13 17:23:55 最近看了,IPC三种通 ...

  7. IPC 机制简介

    IPC 机制简介 概述 在Unix早期发展中,做出重大贡献的两大主力Bell实验室和伯克利大学(BSD)在IPC(InterProcess Communication)方面的侧重点有所不同.前者对Un ...

  8. pipe()管道最基本的IPC机制

    <h4>进程间通信 fork pipe pie_t 等用法(管道机制 通信)</h4>每个进程各自有不同的用户地址空间,任何一个进程的全局变量在另一个进程中都看不到,所以进程之 ...

  9. Android的IPC机制(一)——AIDL的使用

    综述 IPC(interprocess communication)是指进程间通信,也就是在两个进程间进行数据交互.不同的操作系统都有他们自己的一套IPC机制.例如在Linux操作系统中可以通过管道. ...

  10. [置顶] 深入理解android之IPC机制与Binder框架

    [android之IPC机制与Binder框架] [Binder框架.Parcel.Proxy-Stub以及AIDL] Abstract [每个平台都会有自己一套跨进程的IPC机制,让不同进程里的两个 ...

随机推荐

  1. 凉经-Mozilla Firefox Ltd

    北京谋智火狐信息技术有限公司(北京市东城区建国门华润大厦17层)过去面试的时候感觉电梯好神奇啊!一边的电梯是直达18层以上的,我按了18层准备到了再往下走一层,一个老司机和我说要做另一边的1-17层的 ...

  2. Vagrant 手册之多个虚拟机 multi-machine

    原文地址 Vagrant 可以通过一个 Vagrantfile 定义并控制多个客户机.这就是所谓的"multi-machine"多虚拟机环境. 这些机器通常可以协同工作,或者互相关 ...

  3. Logistic Algorithm分类算法的Octave仿真

    本次Octave仿真解决的问题是,根据两门入学考试的成绩来决定学生是否被录取,我们学习的训练集是包含100名学生成绩及其录取结果的数据,需要设计算法来学习该数据集,并且对新给出的学生成绩进行录取结果预 ...

  4. 关于eclipse中的maven插件问题

    最近上课讲eclipse 中的maven插件 有一个坑确实比较坑,实际上就是一个配置的原因. 就是在eclipse中设置java 的buildpath的时候,一般不注意往往都设置成了jre的,这样的话 ...

  5. Ubuntu下的图形化多线程下载器XDM

    目录 1.下载 2.安装 3.浏览器支持 使用Ubuntu下载东西经常过于缓慢,因此需要多进程下载器. 1.下载 下载链接:http://xdman.sourceforge.net/#download ...

  6. Go语言格式化字符串

    %s: 普通字符串 %q: 引号包含字符串 %x, %o, %b: 十六进制,8进制,2进制 %t: bool值 %d decimal integer %v any value in a natura ...

  7. telnet访问出现telnet:Unable to connect to remote host: No route to host

    Linux下的防火墙默认是不允许telnet服务通过的,所以,当防火墙不允许telnet服务通过时就会出现上面的这种情况,可以将防火墙关闭或者勾选允许telnet服务即可解决如上的问题.

  8. (Vue)移动端点击输入框,弹出键盘,底部被顶起问题

    (Vue)移动端点击输入框,弹出键盘,底部被顶起问题:https://www.jianshu.com/p/210fbc846544 问题描述:Vue开发中,当我们相对于父视图的底部布局子控件时,需要用 ...

  9. KNN算法案例--手写数字识别

    import numpy as np import matplotlib .pyplot as plt import pandas as pd from sklearn.neighbors impor ...

  10. python 分析 知乎粉丝数据

    昨天花了一下午写了一个小爬虫,用来分析自己的粉丝数据.这个真好玩!今天帮了群里好多大V也爬了他们的数据.运行速度:每分钟5千粉丝以上.暂时先写成这样,这两天要准备补考,没有时间继续玩这个. 下次要改进 ...