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

  • 相关阅读:
    开始用博客
    nginx 移动端和PC端相互访问
    call、apply、bind的区别
    获取两个日期之间的所有日期组合
    高频前端开发问题
    图片懒加载实现
    某某公司中级前端面试题
    flex 布局
    plupload.js+php批量上传文件到阿里云oss
    H5 iframe 高度-根据内容的高度自适应 / iframe高度适配
  • 原文地址:https://www.cnblogs.com/nicoleTeng/p/7411131.html
Copyright © 2011-2022 走看看