这是我参与「第四届青训营 」笔记创作活动的的第1天
一、开发和交付
我觉得这一小节十分重要的,为什么呢?
图中我们的开发并不与客户直接沟通,而是通过经过了产品经理这一层,这不得不说到昨天读到的一篇文章《六年安卓开发的技术回顾和展望》中提到的两个能力:
1、同频对话的能力
大多数程序员都有的一个问题,在产品经理提出需求后,直接就开工,这导致了中途会出现需求理解不当不断返工或者部分需求无法实现需要调整,使得我们的效率大大下降,所以我们在开工之前需要和产品经理沟通,只有正确的理解了需求才能避免更多没必要的问题。这一点也十分考验我们的软实力。
2、提供便捷的数据反馈机制
在产品提需求时,你可以问问产品这个需求出于什么考虑,有没有数据支撑?比如说产品需求是某个按钮换个位置,那你要搞清楚,为什么要换,换完之后会导致页面打开率提升吗?要有这种数据驱动的理念。
只有我们清楚的了解需求,才能高效的交付出一款高质量的客户端。
我们可以从三个角色分析如何交付出高质量的客户端。
二、认识Android
本小节来到了我们的主战场Android
2010年Android开源和兼容性技术负责人Dan Morrill在开发手册兼容性部分所解释道
"Android并不是传统的Linux风格的一个规范或分发版本,也不是一系列可重用的组件集成,Android是一个用于连接设备的软件块。"
既然了解到它是一个软件块,我们就可以很好的理解不同层级的划分,接下来从下至上分析(因为我们的手机是从下至上一层一层的使用)
内核层(Linux Kernel)
例如安全,内存管理,进程管理,通讯等方面内容要想高效的利用,就得靠我们的内核来进行管理。
硬件抽象层(Hardware Abstraction Layer)
在现在的智能手机中传感器更是层出不穷,如音频,蓝牙,WI-FI,温度等等,每个厂商都使用者不同型号的硬件,为了方便统一管理,Android系统对硬件进行了抽象并提供标准界面。其中包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面,例如相机或蓝牙模块。当Java API框架要访问设备硬件时,Android 系统将为该硬件组件加载库模块。
Android Runtime
这一层就会涉及虚拟机的知识,在一层会把DEX字节码进行编译,优化执行效率。在一层我们可以做一些体验相关的优化,让代码运行更高效。所需要的技术门槛也就更高一些。
主要功能有:
A、预先 (AOT) 和即时 (JIT) 编译 。
B、优化的垃圾回收 (GC)。
C、更好的调试支持,包括专用采样分析器、详细的诊断异常和崩溃报告,并且能够设置观察点以监控特定字段
D、Android9以上更好的转换把DEX文件转换成更紧凑的机器代码。
原生 C/C++ 库
一些核心的系统服务和组件是C/C++编写的,我们可以用Android NDK 直接从原生代码访问某些原生平台库。从这一层往下,一些多样化的需求就可以被满足的很好,比如音视频编解码、安全、质量、体验等。
Java API 框架
您可通过以 Java 语言编写的 API 使用 Android OS 的整个功能集。