从开发的角度来看,App的运行是在一定的框架内进行的,而这个框架以四大组件为基础,通过系统提供的特性支持,来完成具体的业务逻辑。所以在框架基础的前提下,个人理解将开发分几个方向:
App软件开发方向
从开发的角度来看,App的运行是在一定的框架内进行的,而这个框架以四大组件为基础,通过系统提供的特性支持,来完成具体的业务逻辑。所以在框架基础的前提下,个人理解将开发分几个方向:
- UI部分:以屏幕呈现为最终目的的相关内容,以Window、Activity、View体系为主的图像呈现;
- 业务开发:这部分主要是通过系统支持、第三方依赖库等支持,完成具体的业务逻辑;(主要是通过多线程,结合四大组件完成);
- NDK开发:以JNI为基础,将业务转移到Native层,通过C/C++实现
- 混合开发:包括HTML5、Flutter、RectNative等跨平台的解决方案
- 应用优化:针对应用(包括原生以及跨平台的app)的性能问题,其中包括内存、耗电、磁盘IO、网络,以及APk安装文件等方面的优化处理;
- 底层开发:主要以系统的Framework支持外核心,扩展到Linux内核相关特性的修改(ROM层面的开发)
UI部分是app开发的核心
UI部分主要以屏幕硬件为载体,通过SDK支持进行图像的绘制呈现,具体学习知识点有:
- 应用层:View体系基础知识,通过这阶段的学习,可以通过已有View/ViewGroup完成内容布局:
- 屏幕坐标系
- 原生以及第三方依赖库的View/ViewGroup的使用
- xml基础
- Activity组件的使用
- 动画
- View体系的高级内容,这个阶段包括几部分的内容:
- View绘制流程——自定义View
- 事件分发机制——结合View树的触摸事件、滑动冲突等用户操作事件处理
- MeasureSpec
- 图像绘制:Surface、Canvase、Paint、OpenGL等绘制API,记录
- ***使用绘制API结合View的绘制流程,再通过一些数学方面的知识支撑具体的形状绘制
- 屏幕适配:主要目的是为了优化布局的显示,主要有两种方案:
- 针对不同尺寸的屏幕,提供一份对应的布局设计
- 通过给屏幕指定一个固定的宽度或高度,这个固定值为基础,重新定义转换成px的比例(也就是屏幕密度)
- 这里涉及了一些单位的相关概念,其中包括dp/px/sp/dpi等单位,需要了解这些这些单位的定义、以及转换关系
- 实现原理:
- 动画实现的内部原理
- View绘制流程Framework侧源码跟踪分析
- 系统的核心服务支持:
- ActivityManagerService
- WindowManagerService
- SurfaceFlinger