Android跨进程通信—IPC机制(一)

本文摘抄自–Android开发艺术探索

简介

IPC是Inter-Process Communication的缩写,含义为进程间通信或跨进程通信,是指两个进程之间进行数据交换的过程。

进程与线程
线程: CPU调度的最小单元,同时线程是一种有限的系统资源。
进程: 一个执行单元,在PC和移动设备上指一个程序或一个应用。 一个进程可以包括多个线程。

开启多进程

一个应用中要存在多个进程,可以给四大组件在AndroidManifest.xml中指定android:process,设置的方式有两种,如下:

<service android:name=".BookManagerService" android:process=":remote"/><service android:name=".BookManagerService" android:process="com.example.remote"/>

区别是:前者是当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中;而后者是全局进程,其他应用可以通过ShareUID方式和它跑在同一个进程中。

注意: 四大组件没有指定android:process属性,则它运行在默认的进程中,默认的进程名为包名

多进程注意事项

由于Android为每个应用分配一个独立的虚拟机,或者说为每个进程都独立分配一个独立的虚拟机,不同虚拟机在内存分配上有不同的地址空间,这就导致在不同的虚拟机中访问的同一个类对象会产生多个副本。
一般来说,使用多进程会造成如下几个方面的问题:
(1)静态成员和单例模式完全失效;
(2)线程同步机制完全失效;
(3)SharedPreferences的可靠性下降;
(4)Application会多次创建。

跨进程通信方式

主要有以下几种:
(1)Intent传递数据
(2)文件共享和SharedPreferences
(3)基于Binder的Messenger和AIDL
(4)ContentProvider
(5)Socket

基础概念–序列化

当通过Intent和Binder传输数据时以及将对象持久化到存储设备或网络传输时,就需要使用序列化。
对象序列化可通过实现Java提供的Serializable或Android自带的Parcelable接口。

Serializable和Parcelable使用
Serializable:一般需要将对象持久化到存储设备或者将对象序列化后通过网络传输时使用,且最好定义一个serialVersionUID常量以保证反序列化正常。
Parcelable:主要用在内存序列化,在Android中一般首先这种序列化。

猜你喜欢

转载自blog.csdn.net/fengyulinde/article/details/79142327