这章关于进程的概念,没有深入太多,只做了解跟学习

  IPC: Inter-Process Communication,进程间通信或者跨进程通信,两个进程之间进行数据交换的过程

  2.1介绍

    线程:CPU调度的最小单元,是一种有限的紫铜资源

    进程:一般指一个执行单元,在PC和移动设备上指一个程序或者一个应用.

    一个进程可以包含多个线程,最简单的情况下,一个进程可以只有一个线程,即主线程,在android中主线程就是UI线程

  2.2 Android中的多进程模式

    2.2.1开启多线程模式(一般指一个应用中存在多个进程的情况)

      在AndroidManifest中指定android:process属性,属性值不同代表不同的进程

      如果是android:process=":remote",":"的含义是指要在当前的进程名前面附加上当前的包名.

      以":"开头的进程属于当前应用的私有进程,其它的属于全局进程,android系统会为每个应用分配一个唯一的UID,具有相同的UID的应用,并且签名相同才能进行数据交换.

     2.2.2 多进程模式的运行机制

      android为每一个应用分配了一个独立的虚拟机,不同的虚拟机在内存分配上有不同的地址空间,导致在不同的虚拟机中访问同一个对象会产生多份副本.

      使用多进程会造成如下几方面的问题:

      1. 静态成员和单例模式完全失效
      2. 线程同步机制完全失效
      3. SharedPreferences的可靠性下降(底层是通过读/写XML文件实现的)
      4. Application会多次创建(相当于重新启动一个应用的过程,会创建新的Application)

     2.3 IPC基础

      2.3.1 Serializable接口

        Serializable是Java所提供的一个序列化接口,是一个空接口,为对象提供标准的序列化和反序列化操作.

        实现序列化只需要一个类实现Serializable接口并申明一个serialVersionUID.

        使用ObjectOutputStream和ObjectInputStream实现写/读

      2.3.2 Parcelabel接口

        Parcel内部包装了可序列化的数据,可以在Binder中自由传输.也可以实现序列化

      但是推荐使用Serializable.

       

      2.3.3 Binder

        Binder是Android中的一个类,继承了IBinder接口

        从IPC角度来说,Binder是Android中的一种跨进程通信方式.

        从AndroidFrameword角度来说,Binder是ServiceManager连接各种Manager和相应ManagerService的桥梁

        从Android应用层来说,Binder是客户端和服务端进行通信的媒介.

        当bindService的时候,服务器会返回一个包含服务端调用的Binder对象,通过这个Binder对象,客户端就能获取服务端提供的服务或者数据.

        Binder主要用在Service中,包括AIDL和Messenger

        Binder工作原理:

        

        

    2.4 Android中的IPC方式

      2.4.1 使用Bundle

        三大组件(Activity,Service,Receiver)都支持在Intent中传递Bundle数据,由于Bundle实现了Parcelable接口,所以它可以方便的在进程间传输

      2.4.2 使用文件共享

        Android系统基于Linux,是的其并发读/写文件可以没有限制的进行,甚至一个线程同时对一个文件进行读写操作都是允许的,但是一般要尽量避免并发写,需要加锁,synchronize

        面对高并发的读/写访问,sharedPreferences有很大几率丢失数据,所以不建议在进程间通信使用sharedPreferences.

      2.4.3 使用Messenger(信使)

        在不同进程中传递Message对象.

        在Message中放入所传输的数据.Messenger的底层实现是AIDL

        实现Messenger一般有两个步骤,分为服务端和客户端

        服务端进程:创建一个Service来处理客户端的连接请求,同时创建一个Handler并通过它来创建一个Messenger对象,然后在Service的onBind中返回这个Messenger对象底层的Binder

        客户端进程:首先要绑定服务端的Service,绑定成功后用服务端返回的IBinder对象创建一个新的Messenger,通过这个Messenger发送消息(Message对象)

        Messenger工作原理:

         

        

      2.4.4 关于AIDL

        同样也有服务端跟客户端.

        服务端需要创建一个Service来监听客户端的连接请求,然后创建一个AIDL文件,将暴露给客户端的接口在AIDL文件中声明,最后在Service中实现这个接口

        客户端需要绑定服务端的Service,绑定成功后将服务器返回的Binder对象转换成AIDL接口所属的类型,接着调用AIDL中的方法

        (PS:这个目前感觉太底层了,没有太深入了解)

      2.4.5 ContentProvider

        ContentProvider的底层实现也是Binder.系统做了封装,使用简单一些

        主要使用CRUD操作和防止SQL注入和权限控制.

        继承ContentProvider类,实现六个抽象方法:onCreate,query,update,insert,delete和getType

        onCreate代表ContentProvider的创建,一般用来做一些初始化工作

        getType用来返回一个Uri请求所对应的MIME类型(媒体类型)

        <provider>标签中需要声明android:authorities代表ContentProvider的唯一标识,android:readPermission和android:writePermission属性分别声明读权限和写权限

      2.4.6  使用Socket

        Socket(套接字),分为流式套接字和用户数据报套接字两种,分别对应于网络的传输控制层中的TCP和UDP协议.

        TCP协议是面向连接的协议,提供稳定的双向通信功能,TCP需要"三次握手"才能完成,本身提供了超时重传机制.

        UDP是无连接的,提供不稳定的单项通信,在性能上,UDP具有更好的效率,缺点是不能保证数据一定能够正确传输.

        使用Socket需要声明权限

          <users-permission android:name="android.permission.INTERNET"/>

          <users-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

      2.5 Binder连接池

        工作原理:

          

       

        

        

第二章: IPC机制的更多相关文章

  1. Android开发艺术-第二章 IPC 机制

    2.1 Android IPC 简单介绍 IPC 意为进程间通信或者跨进程通信,线程是 CPU 调度的最小单元,是一种有限的系统资源. 进程一般指一个执行单元.不论什么操作系统都须要对应的 IPC 机 ...

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

    一.Serialiable与Paracle ①.作用    ②.使用 二.Binder与AIDL ①.各自的作用 三.如何使用IPC机制 举例 四.IPC机制的原理 ①.流程图  ②.自己编译自动生成 ...

  3. 《Android开发艺术探索》读书笔记 (2) 第2章 IPC机制

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

  4. 第二章IPC——IPC与开启多进程

    问题 一.IPC ①.什么是IPC  ②.为什么要有IPC 二.多进程 ①.如何开启多进程  ②.系统如何创建多进程 三.多进程引发的问题 问:私有进程(利用":+进程名")能否共 ...

  5. 【读书笔记】《深入浅出nodejs》第二章 模块机制

    1.什么是模块? 指在程序设计中,为完成某一功能所需的一段程序或子程序:或指能由编译程序.装配程序等处理的独立程序单位:或指大型软件系统的一部分. ----<百度百科> 2.JavaScr ...

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

    Android艺术开发探索--第二章:IPC机制(下) 我们继续来讲IPC机制,在本篇中你将会学习到 ContentProvider Socket Binder连接池 一.使用ContentProvi ...

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

    Android开发艺术探索--第二章:IPC机制(中) 好的,我们继续来了解IPC机制,在上篇我们可能就是把理论的知识写完了,然后现在基本上是可以实战了. 一.Android中的IPC方式 本节我们开 ...

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

    Android开发艺术探索--第二章:IPC机制(上) 本章主要讲解Android的IPC机制,首先介绍Android中的多进程概念以及多进程开发模式中常见的注意事项,接着介绍Android中的序列化 ...

  9. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

随机推荐

  1. 点击提交按钮,屏幕会出现闪烁问题,element.style问题

    点击提交按钮,屏幕会出现闪烁问题 通过后台调试发现,在点击的按钮的时候会给body添加一个padding值,而且会出现怎么都修改不了的问题,会发现里面会有 element.style的值,这其实是一种 ...

  2. JavaWeb网上图书商城完整项目--day02-10.提交注册表单功能之页面实现

    1.当从服务器返回的注册错误信息的时候,我们在注册界面需要将错误信息显示出来 我们需要修改regist.jsp页面的代码:其中error是一个haspmap,c标签对map的属性可以直接使用 ${er ...

  3. IDEA创建SpringBoot的多模块项目教程

    最近在写一个多模块的SpringBoot项目,基于过程总了一些总结,故把SpringBoot多个模块的项目创建记录下来. 首先,先建立一个父工程: (1)在IDEA工具栏选择File->New- ...

  4. Spring IoC 循环依赖的处理

    前言 本系列全部基于 Spring 5.2.2.BUILD-SNAPSHOT 版本.因为 Spring 整个体系太过于庞大,所以只会进行关键部分的源码解析. 本篇文章主要介绍 Spring IoC 是 ...

  5. python基础知识扩展(一)

    python课外笔记 1.print函数 print("helloworld")其实系统默认隐藏了一个参数end,完整的print()语句是 print("hellowo ...

  6. SpringMVC和Spring

    SpringMVC和Spring汇总 转载:https://www.cnblogs.com/doudouxiaoye/p/5693399.html 1. 为什么使用Spring ? 1). 方便解耦, ...

  7. 【博弈】HDU - 5963 朋友

    题目 B君在围观一群男生和一群女生玩游戏,具体来说游戏是这样的: 给出一棵n个节点的树,这棵树的每条边有一个权值,这个权值只可能是0或1. 在一局游戏开始时,会确定一个节点作为根.接下来从女生开始,双 ...

  8. Unity ugui Anchor锚点自动适配画布中的相对位置

    本随笔参考了以下博客,在此基础上进行优化和改进: https://blog.csdn.net/qq_39640124/article/details/88284191 ugui中的Anchor预设如下 ...

  9. [译]高性能缓存库Caffeine介绍及实践

    概览 本文我们将介绍Caffeine-一个Java高性能缓存库.缓存和Map之间的一个根本区别是缓存会将储存的元素逐出.逐出策略决定了在什么时间应该删除哪些对象,逐出策略直接影响缓存的命中率,这是缓存 ...

  10. 【git】配置git命令行别名

    引言:由于有些git命令较长,记起来比较麻烦,为了git工具使用的方便,为命令行取别名有很大的必要. 1.在家目录添加.gitconfig文件. 此文件在创建git仓库时,一般是没有的,需要手动添加. ...