单应用多进程的分析及原因

像微信、qq、网易等app运行时都有多个进程在跑,而喜马拉雅甚至有4个,原因是?


推送(或者其他需要保持运行的功能)

参考  微信Android客户端架构演进之路

由于c2dm已经结束,而且在天朝,gcm是不能用的,推送只能自己实现

国内网络的特殊性,使得我们再实现微信推送机制时,需要维持准确的心跳周期。如果一段时间没有活动,运营商便会将长连接断开以回收资源,这时服务器发消息给客户端就接收不到了。进一步研究发现,运营商网络的时间限制各个地区不同,有的地区有两分钟,有的地区有半个小时,这种情况是不可接受的。我们的解决方案是缩短心跳间隔,在网络运营商把客户端到接入点之间的连接断开之前,我再发送一次心跳,主动维持住这个长连接的活性。这个我们称之为长连接的保活。

1.GCM:Google Cloud Messaging

2.C2DM:Android Cloud to Device Messaging

Android运行时的择优置换机制,会选取占用资源最多的程序结束掉,而结果就是在用户手机运行APP比较多的时候,应用会被系统杀掉回收资源,消息收取不及时的问题就出来了。

微信的解决方法:

微信选择的,是轻重进程拆分的思路。通过在微信3.5版本时候做的架构重构,实现了不受功能增长、系统缺陷影响的稳定推送方案。

对比v1.x版本的微信客户端架构图,将右下角Network的部分用轻重进程分离的思想,独立到一个单独的进程(:push)中,而上面两个层级依然跑在微信的主进程(:worker)中。而对于有内存泄露问题的webview或者其他不频繁使用的功能,再把其分离到独立的工具进程(:tools)中。通过分离进程,微信第一次重构解决了系统因为微信资源消耗,主动干掉微信服务的困境。分离后的push进程内存占用以及被系统kill回收的几率大幅降低,而对于worker和tools进程,不再要求其一定存在,只在用户收到消息,或者进入h5相关功能界面时存在即可。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,556评论 25 708
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,991评论 19 139
  • 前言 在13年11月中旬时,因为基础组件组人手紧张,Leo安排我和春哥去广州轮岗支援。刚到广州的时候,Ray让我和...
    画十阅读 900评论 0 1
  • 两鬓白发渐日浓。目蒙沙,耳闻哑。满心愁思谁人挂。佝身擎天,偻背撑家。何时又言他。 多少年华晃如沙。丹心一片为寒家。...
    寒菊阅读 377评论 9 4
  • 形容一个人好看,用漂亮,用沉鱼落雁。 形容一个人人很好,用好很好,忒别好,非常非常好。 …… ...
    寒凝孤悬月阅读 373评论 0 2