一个多语言需求引发的思考 发表于 2019-05-27 | 分类于 Android 挺早之前项目中的一个多语言相关的需求,觉得还蛮有意思的,现在想起来决定写一篇文章记录一下。第一部分主要是Android字符串资源加载的源码分析,第二部分是需求的解决方案,只对解决方案感兴趣的直接看第二部分即可。 项目背景需求描述由于我们的App用户包括普通公司与各大高校,在文案显示上,同样位置的文案 ... 阅读全文 »
Android数据库更新设计 发表于 2019-05-20 | 分类于 Android Android数据库更新方案设计数据库更新场景简单的场景表增减、表字段增减、跨单版本升级。 复杂的场景表名更改、字段名更改、跨多版本升级。 常见解决方案概述升级方案的需求 易用,易维护,尽量自动化。这个需求要求设计的数据库升级方案在第一次编码完成后,后续每次升级应该无需改动升级的逻辑,做到升级的透明 ... 阅读全文 »
Android模块化重构小结 发表于 2019-05-15 | 分类于 Android 本文主要是对之前做的项目模块化重构过程的一个阶段性总结,内容包括实践过程中的技术选型和问题解决方案。 写在前面项目背景1、业务侧预计未来会有单独的业务模块打包给第三方作为sdk接入,需要模块化提供技术支撑 2、目前项目结构混乱,层级不清晰,不利于维护 3、主工程代码较多,有30多万行(纯Java代码 ... 阅读全文 »
关于Android日志监控设计的一些想法 发表于 2019-05-04 | 分类于 Android 本文是笔者具实践的一些总结,并不会涉及太具体的技术细节,更倾向于为有同样需求的小伙伴提供一个实现上的方向参考。 日志系统的整体架构设计在参考了一些日志系统的设计介绍之后,发现端上的日志系统设计其实大同小异,各个模块的解决方案也都较为成熟,简单总结了一个架构设计如下图: 从左往右看,依次是客户端、服 ... 阅读全文 »
DataBinding源码浅析 发表于 2019-02-23 | 分类于 Android 本文假设读者对MVVM模式以及DataBinding的使用有基本的了解,在此基础上再深入讨论DataBinding在MVVM模式中承担的功能,以及其实现的原理。 DataBinding与MVVM这一节主要讨论DataBinding在MVVM中起到的作用,先来看下MVVM模式的基本结构图: 注意到 ... 阅读全文 »
Android架构组件LiveData源码分析 发表于 2018-10-29 | 分类于 Android 本文主要从源码角度介绍架构组件LiveData的实现原理,默认读者已经熟悉LiveData的基本使用。 观察者模式与发布-订阅模式之前一直没有特别关注过观察者模式与发布-订阅模式的区别,刚好借此机会去了解了一下。简单来说,两者的核心区别是: 在观察者模式的实现中,观察者(订阅者)是由发布者来维护的, ... 阅读全文 »
Androd架构组件Lifecycle源码分析 发表于 2018-10-14 | 分类于 Android 本文主要从源码角度介绍架构组件Lifecycle的实现原理,默认读者已经熟悉Lifecycle的基本使用。 功能与使用场景功能外部使用者可以通过Lifecycle来订阅Activity与Fragment的生命周期变化,同时也可以主动去获取当前Activity与Fragment处于哪个生命周期。 使用 ... 阅读全文 »
Android架构组件ViewModel源码分析 发表于 2018-10-13 | 分类于 Android 本文主要从源码角度介绍架构组件ViewModel的实现原理,默认读者已经熟悉MVVM设计模式。 功能与使用场景在分析原理之前,简单的过一遍功能以及结合具体场景介绍实现原理会更容易理解。 主要功能在MVVM的模式中,ViewModel的作用在于维护数据与发送消息。但是当前要讨论的架构组件ViewMod ... 阅读全文 »
ARouter源码浅析 发表于 2018-09-25 | 分类于 Android 这篇文章主要分析ARouter中路由与服务相关的源码(不涉及依赖注入)。 路由框架要解决哪些问题?在开始源码分析之前,先考虑一下这个问题。 在这一节,会抛出几个问题,而下面的源码分析,就会围绕这一节的问题而展开。 1、路由信息如何搜集? 2、如何完成跳转,如何传参? 3、跳转过程中需要插入一些公用逻 ... 阅读全文 »
Java编译优化 发表于 2018-09-10 | 分类于 Java 概述前端编译器与后端编译器根据完成任务不同,可以将编译器的组成部分划分为前端(Front End)与后端(Back End)。 前端主要指与源语言有关但与目标机无关的部分,包括词法分析、语法分析、语义分析与中间表示生成。 后端主要指与目标机有关的部分,包括代码优化和目标代码生成等。 Java编译器J ... 阅读全文 »