Android 开发艺术探索读书笔记 2 -- IPC 机制

本篇文章主要介绍以下几个知识点:

  • Android IPC简介;
  • Android 中的多进程模式 ;
  • IPC基础概念介绍 。
hello,夏天 (图片来源于网络)

2.1 Android IPC简介

IPCInter-Process Communication 的缩写,含义是进程间通信或跨进程通信,指两个进程间进行数据交互的一个过程。

  • 线程:是CPU调度的最小单元,同时是一种有限的系统资源

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

一个进程可包含多个线程,进程和线程是包含与被包含的关系。

最简单的情况下,一个进程中可以只有一个线程,即主线程,在 Android 里主线程也叫 UI 线程,在 UI 线程里才能操作界面元素。

若一个进程中要执行大量耗时的任务,把这些任务放在主线程中去执行就会造成界面无法响应,在 Android 中叫做 ANR (Application Not Responding),即应用无响应,这时要把这些耗时的任务放在线程中即可。

2.2 Android 中的多进程模式

Android 中通过给四大组件指定 android:process 属性,可轻易开启多进程模式,但实际使用过程中却暗藏杀机,甚至弊大于利。

2.2.1 开启多进程模式

正常情况下,在 Android 中多进程是指一个应用中存在多个进程的情况,这里不讨论两个应用之间的情况。

在 Android 中使用多进程只有一种方法,那就是给四大组件指定 android:process,即无法给一个线程或实体类指定其运行时所在的进程(通过 JNI 在 native 层去 fork 一个新的进程,是一种非常规的创建多进程方式,暂不考虑此方式),如下:

        <!-- 没指定 process 属性,运行在默认进程中 -->
        <activity
            android:name=".chapter02.Chapter02Activity"/>

        <!-- 当 SecondActivity 启动时,系统会为它创建一个单独的进程,
             进程名:com.wonderful.androidartexplore:remote -->
        <activity
            android:name=".chapter02.SecondActivity"
            android:process=":remote"/>

        <!-- 当 ThridActivity 启动时,系统也会为它创建一个单独的进程,
             进程名:com.wonderful.androidartexplore.remote -->
        <activity
            android:name=".chapter02.ThirdActivity"
            android:process="com.wonderful.androidartexplore.remote"/>

上面分别为 SecondActivity 和 ThirdActivity 指定了 process 属性,当运行程序时发现进程列表末尾存在三个进程,说明成功的开启了多进程。

上面 SecondActivity 和 ThirdActivity 的进程名分别为:remote包名.remote,有两方面区别:

1. “:”的含义是指在当前的进程名前附加上包名,是一种简单写法,SecondActivity 的完整进程名为 com.wonderful.androidartexplore:remote,而 ThirdActivity 中的申明方式,是一种完整的命名方式,不会附加包名信息;

2. 进程以”:“开头的属于当前应用的私有进程,其他应用的组件不可以和它跑在同一个进程中,而进程名不以”:“开头的进程属于全局进程,其他应用通过ShareUID方式可以和它跑在同一进程中。

2.2.2 多进程模式的运行机制

所有运行在不同进程中的四大组件,只要它们之间需要通过内存来共享数据,都会共享失败,这也是多进程带来的主要影响,正常情况下四大组件中间不可能不通过一些中间层来共享数据,那么通过简单地指定进程名来开启多进程都会无法正确运行。

当然,特殊情况下,某些组件之间不需要共享数据,这时可直接指定 android:process属性来开启多进程,但这种场景不常见,几乎所有情况都需要共享数据。

一般来说,使用多进程会造成如下几方面的问题:

(1)静态成员和单例模式完全失效。

(2)线程同步机制完全失效。

(3)SharedPreferences的可靠性下降。

(4)Application会多次创建。

对于问题1,Android 为每个进程都分配一个独立的虚拟机,不同的虚拟机在内存上有不同的地址空间,这就导致在不同的虚拟机中访问同一个类的对象会产生多份副本。

对于问题2,本质上和第一个问题是类似的,既然都不是一块内存了,那么不管是锁对象还是锁全局类都无法保证线程同步,因为不同进程锁都不是同一个对象。

对于问题3,是因为SharedPreferences不支持两个进程同时去执行写操作,否则会导致一定几率的数据丢失,这是因为SharedPreferences底层是通过读/写XML文件来实现的,并发读/写都有可能出问题

对于问题4,当一个组件跑在一个新的进程中时,由于系统要在创建新的进程同时分配独立的虚拟机,此过程就是启动一个应用的过程,相当于系统又把这个应用重启动了一遍,从而创建新的 Application。

或者说,运行在同一个进程中的组件是属于同一个虚拟机和同一个 Application 的,同理,运行在不同进程中的组件是属于两个不同的虚拟机和 Application 的。

2.3 IPC 基础概念介绍

IPC 中的一些基础概念,主要包含三方面内容:Serializable接口,Parcelable接口以及Binder

SerializableParcelable 接口可以完成对象的序列化过程,当需要通过 IntentBinder 传输数据时就需要用到它们。

当把对象持久化到存储设备上或通过网络传输给其他客户端时,也需要使用 Serializable 来完成对象的持久化。

2.3.1 Serializable 接口

2.3.2 Parcelable 接口

2.3.3 Binder

2.4 Android 中的 IPC 方式

2.4.1 使用Bundler

2.4.2 使用文件共享

2.4.3 使用Messenger

2.4.4 使用AIDL

2.5 Binder 连接池

2.6 选用合适的 IPC 方式

IPC 方式的优缺点和适用场景
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,513评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,312评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,124评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,529评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,937评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,913评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,084评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,816评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,593评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,788评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,267评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,601评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,265评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,158评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,953评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,066评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,852评论 2 277

推荐阅读更多精彩内容