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机制,让不同进程里的两个 ...
随机推荐
- JVisualVM 模拟一次内存泄漏场景分析
首先贴一段内存泄漏的代码并且执行.(内存泄漏:GC回收不掉的实例对象) package com.example.demo.memoryLeakDemo; import com.example.demo ...
- 利用Fiddler对手机应用抓包
1.启动Fiddler,打开菜单栏中的 Tools > Fiddler Options,打开“Fiddler Options”对话框. 2.在Fiddler Options”对话框切换到“Con ...
- vue.js + element 搭建后台管理系统 笔记(一)
此文仅记录本人在搭建后台系统过程中遇到的难点及注意点,如果能帮到各位自然是极好的~~~ 项目主要架构:vueJS.elementUI.scss 一.项目初始化 首先需要安装nodejs,安装方法就不在 ...
- Unity shader with lightmap
小记一下用法与问题,时更 surface shader就不用操心了,自带lightmap计算 主要是vertex fragment shader部分 Unity5 bake light map有三种情 ...
- flex布局相关用法
/* pages/classic/classic.wxss */ .chunk { /* 行内元素可设置但是设置了flex,无效了 *//* display: inline-block; */ wid ...
- Zepto v1.0-1源码注解
/* Zepto v1.0-1-ga3cab6c - polyfill zepto detect event ajax form fx - zeptojs.com/license */ ;(funct ...
- [Bzoj1051][HAOI2006]受欢迎的牛(tarjan)
题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1051 由题意可知,被所有牛仰慕的牛之间也互相仰慕,则最后的答案一定是唯一的强连通分量,如 ...
- 洛谷 P1589 泥泞路 & 2019青岛市竞赛(贪心)
题目链接 https://www.luogu.org/problemnew/show/P1589 解题思路 用结构体存下每一段泥泞路的左端点和右端点,然后用sort根据左端点排序,采用贪心的思想,从左 ...
- cgi+lighttpd上传大文件失败解决办法
问题: - 前端页面点击上传按钮,不超过30M的小文件顺利上传到板子指定位置,上传60Md的更新包,出错,http状态码413——请求实体过大 环境: - web服务器——lighttpd1.4.30 ...
- 记录混合APP开发遇到的坑!!
1.在IOS中给body绑定click事件会失效 2.在IOS中<div contenteditable="true"></div>中点击时可以弹出键盘但是 ...