单应用的多进程架构

一直想搞清楚,一个人的多重人格之间,究竟是如何进行通信的。

一个应用中通常只有一个进程,这也是大部分的App的做法,很少有App的体量能够大的需要多进程来支撑。然而现在时代不同了,各种第三方服务,各种『黑科技』,很多东西,都需要利用多进程来进行架构,这类服务,例如XXX推送SDK,基本上会开一个新的进程,再例如一些Web容器,也会结合新的进程来使用,还有一些插件,运行在新的进程中,可以解决一些比较奇葩的问题。

那么单应用多进程架构,究竟有哪些好处呢?简单的说,我可以列举下面一些:

  1. 偷内存。内存是按照进程来进行分配的,也是通过进程来进行统计的,开辟新的进程,将为自己的应用偷偷拿到一大块内存,降低被LMK Kill的风险。
  2. 互不影响。即使新开的进程崩溃,也不会导致主应用的进程受到影响。
  3. 保活。主应用的进程即使退出,新的进程依然可以存活,从而可以继续为应用服务,这就是推送进程最常用的方式。

申明多进程非常简单,在对应的组件的Mainifest上添加process标签就好了,没有什么好说的,网上博客一大堆。

虽然多进程看上去好像很美,但是,单应用多进程的架构,也会给你的程序带来很多负面影响,简单的说,我也列举下面一些:

  1. Application的多次初始化。每次进程的创建,都会走一遍Application的初始化,这也是有些推送SDK会让应用的Application多次重建的原因。
  2. 变量无法共享。由于是不同的进程,变量在不同的进程中,单独存在,所以是无法共享的。每个进程,都将把一个类初始化一次。
  3. 调试困难。Android Studio是针对单进程的调试,如果要进行多进程的调试,虽然可以通过附加进程的方式来做,但在调试过程中,还是非常麻烦的,而且很容易出错。
  4. 数据、方法调用困难。由于运行在不同的进程,所以,不仅仅是变量无法共享,你的类的实例都不是一个,更不要说方法调用了。
  5. 极大的增大了程序的可读性与开发难度。经常需要的跨进程通信都是双向通信,所以,中间的消息转发过程,就是一个很麻烦的地方。

由上面可以看出,多进程之间,最麻烦的就是通信。Android系统给我们提供了AIDL来帮助开发者实现跨进程通信,但是要注意,现在很多很多的Android书籍,一讲到跨进程通信,就是AIDL,可是,这都什么年代了,跨进程通信的方式已经变革很多次了,当然最基础的,就是AIDL,接下来,还有对它进行封装的Messenger,再接下来,还有Broadcast和ContentProvider,甚至是Socket,这些都是可以用来进行跨进程通信的,特别是ContentProvider的call方法,有几个人知道可以用来进行跨进程通信的?所以请不要天天守着书上的知识,一定要与时俱进啊,下次面试被问到跨进程,可千万别直说AIDL了!

原文发布于微信公众号 - Android群英传(android_heroes)

原文发表时间:2016-08-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java帮帮-微信公众号-技术文章全总结

【大牛经验】搜狗商业平台Java技术实践

搜狗商业平台Java技术实践 Java自1995年问世以来,已历经20多年岁月。20年来,IT技术风起云涌,Java始终以其可移植性、跨平台性、生态系统完备性等...

43610
来自专栏云上大文件传输

为什么不建议在云主机上使用ftp的2个原因

ftp文件传输服务历史源远流长,第一版FTP RFC协议制定于1971年,经过多年的完善、修补,很多80年代出生的IT人的第一次文件传输经历就是通过FTP完成的...

7338
来自专栏数据库新发现

Sun Cluster工作原理介绍(转)

本章的结构安排是以介绍Sun Cluster中重要的概念为主线。相关的工作原理分布在各个概念的介绍之中。     quorum的概念在分布式系统中经常被用到。...

883
来自专栏逸鹏说道

大公司都有哪些开源项目之新浪

新浪:WeiBo https://github.com/weibocom 1.分布式缓存服务器 memcachedb memcachedb是 一个由新浪网的开发...

37710
来自专栏Java后端技术栈

大型网站技术架构总结一二

早期的网站为了节省成本一般会设计成集中式系统,应用程序、数据库等都部署在一台服务器上。 但随着业务的快速度发展,逐渐出现瓶颈,按一定原则**(应用拆分、服务拆分...

1282
来自专栏DevOps时代的专栏

维护了这么久的服务器,你真的认识 Web 缓存体系?

前言 很高兴认识大家,之前做过很多分享,今天这次终于讲到正题了。因为之前一直讲自动化运维,其实做这么多年运维,自动化运维没干多少年。这几年很多公司各方面机器数量...

3458
来自专栏开源项目

揭秘互联网防火墙核心技术 | 码云周刊第 55 期

在日益复杂的互联网活动中,一个网络防火墙扮演着防备潜在的恶意的活动的屏障,并可通过一个”门”来允许人们在你的安全网络和开放的不安全的网络之间通信。今天,小编推荐...

3213
来自专栏程序你好

微服务通信中的设计模式

我在上一篇文章中,我谈到了微服务中涉及到的设计模式。现在,我想深更深入介绍微服务架构中最重要的设计模式:微服务之间的数据通讯。当我们用于开发独立应用程序时通讯是...

2442
来自专栏CSDN技术头条

【问底】徐汉彬:亿级Web系统搭建——单机到分布式集群

大规模流量的网站架构,从来都是慢慢“成长”而来。而这个过程中,会遇到很多问题,在不断解决问题的过程中,Web系统变得越来越大。并且,新的挑战又往往出现在旧的解决...

25710
来自专栏程序你好

消息通知子系统用户需求

2184

扫码关注云+社区

领取腾讯云代金券