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协议(无连接的协议,提供不稳定的通信功能,性能上具有更好的效率,确定是不保证数据一定能够正确传输)

时间: 2024-10-11 06:34:57

IPC机制总结的相关文章

ndk学习15: IPC机制

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

为什么Android要采用Binder作为IPC机制?

作者:Gityuan链接:https://www.zhihu.com/question/39440766/answer/89210950来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 在开始回答 前,先简单概括性地说说Linux现有的所有进程间IPC方式: 1. 管道:在创建时分配一个page大小的内存,缓存区大小比较有限:2. 消息队列:信息复制两次,额外的CPU消耗:不合适频繁或信息量大的通信:3. 共享内存:无须复制,共享缓冲区直接付附加到进程虚拟地址空间,

Android开发艺术探索——第二章:IPC机制(上)

Android开发艺术探索--第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化机制和Binder,然后详细的介绍Bundle,文件共享,AIDL,Messenger,ContentProvider和Socker等进程间通讯的方法,为了更好的使用AIDL进行进程间通讯,本章引入了Binder连接池的概念,最后,本章讲解各种进程间通信方式的优缺点和使用场景,通过本章,可以让读者对

Android艺术开发探索——第二章:IPC机制(下)

Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvider ContentProvider是Android中提供的专门用来不同应用之间数据共享的方式,从这一点来看,他天生就是适合进程间通信,和Messenger一样,ContentProvider的底层实现同样也是Binder,由此可见,Binder在Android系统中是何等的重要,虽然Conten

Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用

在上一篇文章Android IPC机制(二)用Messenger进行进程间通信中我们介绍了使用Messenger来进行进程间通信的方法,但是我们能发现Messenger是以串行的方式来处理客户端发来的信息,如果有大量的消息发到服务端,服务端仍然一个一个的处理再响应客户端显然是不合适的.另外,Messenger用来进程间进行数据传递但是却不能满足跨进程的方法调用,接下来我们来使用AIDL来实现跨进程方法调用,此前我们都是用Eclipse来实现的,这次我们看看在Android Studio中使用AI

第二章——第二节 IPC机制的概述和使用

一.Serialiable与Paracle ①.作用    ②.使用 二.Binder与AIDL ①.各自的作用 三.如何使用IPC机制 四.IPC机制的原理 ①.流程图  ②.自己编译自动生成的Aidl代码 回答: Serialiable的使用 步骤:1.创建类并继承Serializable接口  2.将对象序列化到文件中 3.从文件中获取序列化的文件 详细步骤: 1.创建Book类,并继承Serializable,编写serialVersionUID降低反序列化失败的概率 public cl

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

1.Handler消息机制 序列 文章 0 Android消息机制-Handler(framework篇) 1 Android消息机制-Handler(native篇) 2 Android消息机制-Handler(实战篇) 2.Binder IPC机制 序列 文章 0 Binder开篇 1 Binder Driver初探 2 Binder Driver再探 3 启动Service Manager 4 获取Service Manager 5 注册服务(addService) 6 获取服务(getS

linux各种IPC机制(进程通信)

linux各种IPC机制 (2011-07-08 16:58:35)     原文地址:linux各种IPC机制(转)作者:jianpengliu 原帖发表在IBM的developerworks网站上,是一个系列的文章,作者郑彦兴,通过讲解和例子演示了Linux中几种IPC的使用方式,我觉得很好,在这里做一个保留,能看完的话Linux IPC的基础是没有问题的了.一)Linux环境进程间通信(一)管道及有名管道http://www.ibm.com/developerworks/cn/linux/

Android IPC机制(五)用Socket实现跨进程聊天程序

相关文章: Android IPC机制(一)开启多进程 Android IPC机制(二)用Messenger进行进程间通信 Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用 Android IPC机制(四)用ContentProvider进行进程间通信 1.Socket简介 Socket也称作"套接字",是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信.它分为流式套接字和

IPC机制key值的各位组成

key_t ftok(const char *_pathname, int _proj_id) key值的第31~24位为ftok()第二个参数的低8位: key值的第23~16位为ftok()第一个参数文件属性的st_dev成员的低8位: key值的第15~0位为ftok()第一个参数文件属性的st_ino属性的低16位. #include <sys/ipc.h> #include <sys/types.h> #include <stdio.h> #include &