Android IPC通信机制之一

IPC:Intent-process Communication,跨进程通信。

在一个应用程序中,可以很方便的开启多进程。开启进程的方式只有一种,只能在AndroidMenifest中为四大组件指定 Android:process属性。

在非常规情况下,也可以通过JNI在native层去fork一个新的进程。

<activity
            android:name=".MainActivity"
            android:label="@string/app_name"
            android:process=":process"
            android:theme="@style/AppTheme.NoActionBar">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

如上,便可开启一个进程。也可以这样,

   android:process="hang.myapplication.process"

这两张方案有什么区别那?    第一种方式,“:”的含义是指要在当前的进程名上添加当前的包名,属于当前应用的私有进程,其他应用的组件不会和它在一个进程中。   第二种方式,它是一个完整的命名方式,不会附件包名信息,该进程是全局进程,其他应用可以通过ShareUid方式和他在同一进程。

android系统会为每个应用分配一个唯一的UID,具有相同UID的应用才能共享数据。 

虽然开启进程很方便,但是多进程会造成很多的问题出现,比如,内存无法共享数据。 

开启进程后,SecondActity无法正确MainActivity修改的值。这是因为正常情况下,两者共享同一内存,由于系统在创建新的进程同时分配独立的虚拟机,那么两者连统一虚拟都不在,何况内存。原理如下:user类在两个进程中是独立存在的,并且这两个类互不干扰。

一般来说,使用多进程会造成如下几个方面影响:   1.静态成员和单例模式完全失效。  2.线程同步机制完全失效。  3.SharedPreferences的可靠性下降。  4.Application会多次创建。由于会分配信的虚拟机,那么也就是重新启动一个应用,自然会创建新的Application。实现跨进程通信的方法有很多,比如Intent,SharedPreference,Binder,以及Socket 通信。
时间: 2024-11-03 21:07:03

Android IPC通信机制之一的相关文章

android ipc通信机制之二序列化接口和Binder

IPC的一些基本概念,Serializable接口,Parcelable接口,已经Binder.此核心为最后的IBookManager.java类!!! Serializable接口,Parcelable接口都是可以完成对象的序列化过程. 序列化 (Serialization)将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. 两者均可以实现序列化并且都可以用于Intent数

android ipc通信机制之之三,进程通讯方式。

IPC通讯方式的优缺点: IPC通讯方式的对比 名称 优点 缺点 适用场景 Bundle 简单易用 只能传输Bundle支持的数据类型 四大组件的进程通信 文件共享 简单易用 不适合高并发场景,并无法做到进程间即时通讯. 无并发访问情形,交换简单的数据是实时性不高的场景. AIDL 功能强大,支持一对多并发通信,支持实时通信. 使用稍微复杂,需要处理好线程同步. 一对多通信且有RPC需求 Messenger 功能一般,支持一对多串行通信,支持实时通信. 不能很好处理高并发情形,不支持RPC,数据

android IPC通信(下)-AIDL

android IPC通信(上)-sharedUserId&&Messenger android IPC通信(中)-ContentProvider&&Socket 这篇我们将会着重介绍AIDL的使用方式和原理,要介绍AIDL先要简单介绍一下Binder,而且Messenger,ContentProvider和AIDL的最底层都是使用的Binder. Binder 直观来说,Binder是Android中的一个类,它实现了IBinder接口.从IPC角度来说,Binder是A

android IPC通信(上)-sharedUserId&amp;amp;&amp;amp;Messenger

看了一本书,上面有一章解说了IPC(Inter-Process Communication,进程间通信)通信.决定结合曾经的一篇博客android 两个应用之间的通信与调用和自己的理解来好好整理总结一下这块的知识.因为内容较多,这部分会分上中下三篇博客来细致分析解说,第一篇上篇要解说的是sharedUserId和Messenger的使用方式. android IPC通信(中)-ContentProvider&&Socket android IPC通信(下)-AIDL sharedUserI

python—day29 守护进程、互斥锁、模拟抢票、IPC通信机制、生产者消费者模型

1.守护进程: 什么是守护进程,假如你是皇帝,每日每夜守护你的就是太监,守护进程就相当于太监,当皇帝驾崩后太监也需要陪葬,所以守护进程当父进程销毁时就一起销毁: 1 from multiprocessing import Process 2 3 import time 4 5 def task(name): 6 7 time.sleep(0.5) 8 print('%s' %name) 9 10 11 if __name__ == '__main__': 12 p = Process(targe

Android 进程通信机制之 AIDL

什么是 AIDL AIDL 全称 Android Interface Definition Language,即 安卓接口描述语言.听起来很深奥,其实它的本质就是生成进程间通信接口的辅助工具.它的存在形式是一种 .aidl 文件,开发者需要做的就是在该文件中定义进程间通信的接口,编译的时候 IDE 就会根据我们的 .aidl 接口文件生成可供项目使用的 .java 文件,这和我们说的"语法糖"有些类似. AIDL 的语法就是 java 的语法,就是导包上有点细微差别.java 中如果两

Android IPC通信以及AIDL技术运用

首先我们了解一下 IPC和AIDL IPC:进程间通信 AIDL:Android Interface Definition Language,即Android接口定义语言. 为什么使用: Android系统中的进程之间不能共享内存,因此,需要提供一些机制在不同进程之间进行数据通信. 为了使其他的应用程序也可以访问本应用程序提供的服务,Android系统采用了远程过程调用(Remote Procedure Call,RPC)方式来实现.与很多其他的基于RPC的解决方案一样,Android使用一种接

深入探索Android IPC/Binder机制

https://thenewcircle.com/s/post/1340/Deep_Dive_Into_Binder_Presentation.htm 注意用键盘上的上下键翻页

Android Service IPC通信之Messenger机制

概述 之前我写过一篇博客介绍Service:Android Service全面解析,里面讲过如何实现Service的跨进程(IPC)通信,主要是通过编写AIDL接口文件来实现的.本篇我们来讲讲Service IPC通信的另外一种方式-Messenger. Messenger,也称为信使,通过它可以在不同的进程间传递message对象,在message中放入我们需要传递的数据你就可以实现跨进程通信和传递数据了.所以说Messenger机制是基于消息的跨进程通信方式. 可以看到,我们可以在客户端发送