Skip to content

Latest commit

 

History

History
262 lines (194 loc) · 4.62 KB

0006-android-arch.asc

File metadata and controls

262 lines (194 loc) · 4.62 KB

Android应用开发之技术构架

1. 主要问题及技术方案

这里,先列举一些应用在从小做大的过程中,面临的一些技术挑战。

1.1. 性能

当产品有了一定的用户规模和体量,性能问题就会逐渐被团队所重视。

Table 1. 性能问题
问题 技术方案

运行速度

  • 性能分析

  • 优化UI布局

  • 优化算法和数据结构

  • 延迟加载(启动速度)

内存占用

  • 防止内存泄露

  • 优化数据结构(例如,用SparseArray、ArrayMap等代替HashMap)

  • 优化图片的使用

  • 多进程架构:常驻进程与非常驻进程

流量消耗

  • TrafficStats#setThreadStatsTag()

  • "/proc/net/xt_qtaguid/stats"

电量消耗

性能分析

1.2. 质量

Table 2. 质量问题
问题 问题描述

Crash

  • UncaughtExceptionHandler

  • 统计分析

代码质量

  • Android Lint(包括自定义规则)

  • StrictMode

  • Android Annotations

  • 单元测试(Testing Support Library)

1.3. 产品改进

1.4. 多进程架构

多进程架构,常驻进程与非常驻进程

Table 3. 多进程架构
问题 解决方案

SharedPreferences

  • Wrapper封装

  • 实现多进程版“SharedPreferences”

  • 多进程访问转单进程访问(例如,通过Provider)

数据库

  • Provider

  • StrictMode

  • Android Annotations

  • 单元测试(Testing Support Library)

1.5. 其它典型问题

Table 4. 其它典型问题
问题 解决方案

APK包大小压缩

  • 删除冗余资源(Android Lint or "shrinkResources")

  • 功能删减

  • 插件化,按需下载功能模块

方法数超出

  • 代码精减

  • Multidex

  • 插件化

文件句柄用尽 [1]

  • WebView:独立进程,按需创建

  • 小心调用Zip相关API

数据库操作异常

  • 单进程:引用计数方式打开/关闭数据库

  • 多进程:ContentProvider

2. 技术架构与选型

在启动一个产品的开发时,我们首先需要建立研发流程,然后再做技术架构与选型。

2.1. 研发流程管理

Table 5. 项目启动之研发流程管理
关注点 要点

源码管理

  • 版本控制(例如,git)

  • Code Review(例如,gerrit、gitlab/PR)

  • 源码版本Tag管理

开发环境与构建系统

  • 操作系统(Mac > Linux > Windows)

  • IDE & 编码规范(例如,Android Studio)

  • 构建系统 & CI(例如,Gradle & Jenkins)

产品运营支持

  • 数据统计(包括Crash统计)

  • 应用版本号管理

  • 渠道号管理

  • 应用签名与打包系统

其它

  • Bug跟踪系统

  • 测试用例管理系统

  • 需求管理系统

2.2. 技术架构与选型

Table 6. 项目启动之技术架构与选型
关注点 要点

Android版本

  • 确定minSdkVersion和targetSdkVersion

反逆向分析

  • 代码混淆

  • 资源混淆

  • 代码加壳

基础代码库

  • 工具类

  • 基础能力封装

  • Wrapper封装,便于管理和演进

公共UI库

  • 制定和实施统一的UI规范

  • UI改版

  • 附属产品的UI统一和重用

3. 技术演进

3.1. 方法论(空)

针对前面提到的主要问题和相应的技术方案。 如何做应用构架,以便能够平滑地进行构架演进。

技术跟踪 & 技术趋势把握 & 。。。

3.2. 技术选型(空)

3.3. 技术跟踪

Table 7. 技术跟踪
关注点 目标 建议

Android版本及SDK

新特性和技术的价值挖掘;及时发现并解决产品的兼容性问题。

  • 新的系统特性和API

  • 系统行为和API的改变

Android Support Library

了解重要API及使用场景

  • v4 Support Library

  • v7 Support Library

  • Annotations Support Library

  • Design Support Library

  • Multidex Support Library

  • …​

Android Studio

关注新特性和内置工具,提升开发效率和质量。

Android Plugin for Gradle

关注新特性,适时引入项目,优化构建流程。

性能优化工具

优化产品的各性能指标(运行速度、内存占用、流量消耗、电量消耗)。

  • Hierarchy Viewer & Overdraw Debugger

  • Traceview & Systrace

  • Memory Profilers / MAT

  • Batterystats & Battery Historian

  • …​

  • 开发性能监控和分析工具

代码质量

引入适当的质量工具,提高代码质量。

  • Android Lint(包括自定义规则)

  • StrictMode

  • Android Annotations

  • 单元测试(Testing Support Library)

3.4. 技术演进(空)


1. 关于文件句柄用尽问题,请参考 https://github.com/dxopt/OpenFilesLeakTest