Commit 42bae0f5 authored by Jacksgong's avatar Jacksgong

feat(post-update): correct format for lls-architecture post

parent f3c27267
......@@ -70,7 +70,7 @@ tags:
> 模块命名前缀为 `lls_process` 是进程模块,并且每个模块的区分以进程为单位
#### 1. 多进程的原因
#### 多进程的原因
> 其实在后来的演进中,我们为了减少因为进程调度对手机资源(CPU、I/O)的消耗,尽可能的合并以及缩减了各类进程(保持一个常驻进程、多个以生命周期为界限的短生命周期非常驻进程)。
> 多进程化当时有受到了[业界某大型安全应用在InfoQ上的一个关于大型移动应用开发的演讲](http://www.infoq.com/cn/presentations/from-360-development-see-big-mobile-application-development)的启发,他们谈到了在一些特定场景下的优势,以及他们从之前的6个进程演变为17个进程,从而使得应用变得更加的稳定。
......@@ -84,7 +84,7 @@ tags:
- 更有效的做UI进程的有损体验(如: 打分进程CRASH以后,在用户使用过程中,通过重启打分进程重新录音打分的机制,尽量减少用户的体验损失)。
- 由于独立进程在自己的JVM上面,内存方面不会对UI进程的内存分配造成直接的影响,因此在一些内存占用较多如大图预览的时候,可以一次性使用,一次性回收。
#### 2. 多进程通讯架构
#### 多进程通讯架构
![](/img/lls_architecture_8.png)
......@@ -101,7 +101,7 @@ tags:
> 主要是对核心架构的辅助,以及一些在核心架构体系下遇到一些问题的解决。
#### 1. 异步加载机制
### 1. 异步加载机制
> 由于核心架构中是通过反射的机制注入每个模块的具体实现,而这块的反射耗时每次都会在百毫秒左右,这是用户每次打开应用或每次UI进程被回收以后恢复都会遇到的耗时问题,因此有了异步加载机制(当然应对类似体验问题,也有一些取巧的方法可以借鉴,比如腾讯新闻的闪屏Activity的Window的背景直接使用了一张闪屏的背景图片)。
......@@ -111,26 +111,26 @@ tags:
这套架构简单粗暴,但十分有效: 对`Activity`系统维系的生命周期转一层的方式,从架构方面对业务层获取到的Activity生命周期进行控制。
#### 2. 拓展灵活性EventBus
### 2. 拓展灵活性EventBus
这个主要是为了弥补在一些情景下,核心架构中的接口显得不够灵活,比如有些操作需要在各个功能模块间透传。但是慎用该类方式,因为考虑到可维护性。由于这套架构网络已经很多衍生了,就不耽误各位时间多说了,有点类似简化的本地广播模型。主要作用是将发送端与接收端充分解耦。
#### 3. 监控系统体系架构
### 3. 监控系统体系架构
对应用的监控是维护应用稳定性与对应用性能量化不可或缺的一个重要的环节,英语流利说在核心架构搭建之初就已经设计了监控模块,主要是做以下监控:
##### ANR监控
#### ANR监控
主要通过系统API监控`/data/anr/traces.txt`文件的变化,进而对其进行分析。
##### Crash监控
#### Crash监控
我们Crash上报部分采用了支持收集native层异常的第三方库: Fabric,在此基础上我们做了以下拓展:
- Crash写文件,主要结合命令系统体系使用输出最近都的crash。
- 非UI进程的Crash不走系统默认Crash处理,走有损体验体系,对于用户不可见。
##### Activity生命周期监控
#### Activity生命周期监控
主要是基于 `Application.ActivityLifecycleCallbacks`,这里的监控主要是辅助以下操作:
......@@ -138,15 +138,15 @@ tags:
- 一些服务的注销。
- `Activity``ContentView`开始遍历扫描,通过置空可能导致泄漏的对象来对`Activity`进行空壳化处理。
##### 内存泄漏监控
#### 内存泄漏监控
我们也是使用Leakcanary这个开源库,在Staging环境上进行检测。
##### 一般性业务层级监控:
#### 一般性业务层级监控:
这里涉及到一个日志选择性上报系统,主要是结合日志系统用于调试难以复现的BUG(默认是关闭的,目前支持用户在应用中主动打开与上传)这套系统受限于篇幅,以后再分享,也许我们会考虑进行开源。
##### 其他监控
#### 其他监控
如下载监控、DNS劫持监控等。
......@@ -154,7 +154,7 @@ tags:
![](/img/lls_architecture_10.png)
#### 4. 管理员系统体系架构
### 4. 管理员系统体系架构
> 管理体系主要是为了测试人员以及开发人员在应用测试阶段能够通过一些绿色通道开启一些对外界用户不开放的功能。
......@@ -164,14 +164,14 @@ tags:
## IV. 英语流利说常用支持型架构
#### 1. 文件存储体系
### 1. 文件存储体系
- `LLSPath`主要支持版本迭代,根据版本升级提供类似数据库一套的数据迁移策略。
- `LLSUserPath``LLSPath`的基础上,提供用户切换,相关路径变更以及相关的操作。
![](/img/lls_architecture_12.png)
#### 2. 防DNS劫持体系
### 2. 防DNS劫持体系
采用HttpDNS,这块我们的核心思想是尽量的精简轻量并尽量维持与现有系统提供的DNS体系相同的策略,主要通过关注以下几点实现:
......@@ -180,7 +180,7 @@ tags:
3. 当存在备选IP时,当延时最低IP连接失败以后,备选IP替换上去。
4. 基于在请求对应Host的IP的时候,远端已经根据延时排序返回对应的IP队列,本地不再做多余的复杂存储与测试(如测速、稳定性测试存储、复杂的抉择策略等)。
#### 3. 图片加载体系
### 3. 图片加载体系
> 已经开源,欢迎PR: [lingochamp/QiniuImageLoader](https://github.com/lingochamp/QiniuImageLoader)
......@@ -191,7 +191,7 @@ tags:
3. 所有的图片请求,默认强制需要提供需要的尺寸规格(如,需要一个宽度为100dp的CenterCrop的图片,需要一个最大宽度不超过屏幕宽度一半的等比例缩放的图片)。
4. 接口简单,易用。
#### 4. 下载体系
### 4. 下载体系
> 已经开源,欢迎PR: [ingochamp/FileDownloader](https://github.com/lingochamp/FileDownloader)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment