作家
登录

Android中的IPC机制

作者: 来源: 2017-05-16 09:16:15 阅读 我要评论

IPC是 Inter-Proscess Communication的缩写,含义为过程间的通信或者跨过程通信,是指两个过程之间进行数据交换的过程。按操作体系的中的描述,线程是CPU调剂最小的单位,同时线程是一种有限的体系资本,而过程是指一个履行单位,在PC和移动设备上指一个法度榜样或者一个应用。一个过程可以包含多个线程,是以过程和线程是包含于被包含的关系。

IPC的应用处景就必须提到多过程,只有面对多过程这种场景下,才须要推敲过程间通信。多过程的情况分为两种:第一种是一个应用因为某些原因自身须要采取多过程模式来实现,原因有很多,应用特别原因须要运行的零丁的过程中,或者为了加年腋荷琐应用可应用内存所以须要经由过程多过程来获取多分内存空间。别的一种情况是:当前应用须要向其他应用获取数据,因为是两个应用,所以必须采取跨过程方法来获取所须要数据。

Android中的多过程模式

开启Android多过程模式很简单,就是给四大年夜组件(Activity,Service,Receiver,ContentProvider)在AndroidMenifest中指定android:process属性。别的还有一种非惯例的做法,那就是经由过程JNI在native层去fork一个新的过程。

此办法用于返回当前的Binder对象

  • onTransact

给process指定多过程有两种不合的情势

  • :remote

这种属于全局过程,其他应用可以经由过程ShareUID方法可以和它跑在同一个过程,我们都知道体系会为每个应用分派一个独一的UID,具有雷同UID的应用才能共享数据。两个应用经由过程ShareUID跑在同一个过程,是须要雷同的ShareUID并且签名雷同才可以。不管它们是不是跑在同一个过程中,具有雷同ShareUID的它们可以拜访对方的私稀有据,如:data目次、组件信息等。当然如不雅是在同一个过程中,除了data目次、组件信息还能共享内存数据。

多过程运行机制

我们知道Android为每一个应用分派了一个自力的虚拟机,或者说为每一个过程都分派了一个自力的虚拟机,不合的虚拟机在内存分派上有不合的地址空间,这就导致在不合的虚拟机拜访同一个类的对象会产生多分副本。

所有运行在不合过程中的四大年夜组件,只要它们之间须要经由过程内存来共享数据,都邑共享掉败,这也是多过程所带来的重要影响,一般来说,应用多过程会造成如下几方面的问题。

  • 静态成员和单例模式完全掉效(都是不合的虚拟机)
  • 线程同步机制完全掉效(都不是同一块内存了)
  • SharePreferences 的靠得住性降低(底层经由过程XML去履行操作的,并发很可能出问题,甚至并发读、写都有可能出问题)
  • Application会多次创建(当一个组件跑在一个新的过程中,因为体系要在创建新的过程同时分派自力的虚拟机,所以这个过程其实就是启动一个应用的过程,是以体系又把这个应用从新启动了一遍,既然都从新启动了,那么天然会创建新的Application)

IPC基本概念介绍

  • Serializable接口

Serializable是Java所供给的一个序列号接口,它是一个空接口,为对象供给标准的序列豢?状序列化操作。应用Serializable相当简单,只须要实现Serializable接口并声明一个serialVersionUID,其拭魅这个serialVersionUID也不是必须的,如不雅不声明这个serialVersionUID也是可以实现序列化的,然则这将会对反序列化过程产生影响。

  1. //序列化 
  2.  
  3. user = new User("xia","123455"); 
  4.           ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("cache.txt")); 
  5.           out.write(user); 
  6.           out.close(); 
  7.           //反序列化 
  8.           ObjectInputStream in = new ObjectInputStream(new FileInputStream("cache.txt")); 
  9.           User newUser = (User)in.readObject(); 
  10.           in.close();   

serialVersionUID是用来帮助序列豢?状序列化过程的,原则上序列化后的数据中serialVersionUID只有和当前类serialVersionUID雷同才能够正常的被反序列化。serialVersionUID的具体工作机制是如许的:序列化的时刻体系会把当前类的serialVersionUID写入序列化的文件中(也可能是其他中介),但反序列化的时刻会去检测文件中的serialVersionUID,看它是否和当前类的serialVersionUID一致,如不雅一致就解释序列化的版本和当前版本是雷同的,这个时刻可以成功的反序列化,不然就解释当前类和序列化的类比拟产生了某些变换,比如成员变量的数量、类型产生了改变,这个时刻无法正常反序列化。

 1/11    1 2 3 4 5 6 下一页 尾页

  推荐阅读

  央行成立金融科技委员会,用人工智能技术加强监管

中国人平易近银行宣布他们在近期成立了金融科技(FinTech)委员会。金融科技是技巧驱动的金融立异,为金融成长注入了新的活力,也给金融安然带来了新挑衅。中国人平易近银行将组织深刻研究金>>>详细阅读


本文标题:Android中的IPC机制

地址:http://www.17bianji.com/lsqh/35226.html

关键词: 探索发现

乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

网友点评
自媒体专栏

评论

热度

精彩导读
栏目ID=71的表不存在(操作类型=0)