Android Framework源码当中哪些类有必要进行深入学习?

Android Framework源码当中哪些类有必要进行深入学习?,第1张

概述前段时间收到了一个网友询问我:两年Android应用开发,没有AndroidFramework开发经验,有没有机会找一份接触到AndroidFramework开发的工作。AndroidFramework源码如何升入学习研究?可能有很多网友会认为:Framework就业方向窄,而且编译很费时。不值得深入学习研究。相信所有

前段时间收到了一个网友询问我:

两年 AndroID 应用开发,没有 AndroID Framework 开发经验,有没有机会找一份接触到 AndroID Framework 开发的工作。AndroID Framework源码如何升入学习研究?

可能有很多网友会认为:Framework 就业方向窄,而且编译很费时。不值得深入学习研究。

相信所有人开始学习androID开发的时候都是从以下这张图开始的,framework位于hal、系统库之上,位于app之下。

Framework同下层打交到的方式就是jni,同上层打交到的方式就是抽象出各种java接口,在开发app的时候,import的各种androID.* 就是各位在查文档时候的东东了。

像网友这样从app而来想要学习framework的肯定对JNI不那么熟悉吧,没关系,Google的命名方式可以让你忽略这部分实现,好好看java代码就够了。

从哪里开始呢?上面那张结构图里面的各种Manager背后都是系统服务,Framework包含各种系统服务,所以“得服务者、得Framework”(我瞎说的,哈哈哈),这里可以简单介绍一下这些服务的结构。
Framework里的服务按照“SystemService.java”里分的话,分为可以Binder的服务、LocalService两类,如下图所示:

每类服务都会在Systemserver.java里启动自己,然后其他服务就可以调用了。而且大部分服务都有一个Manager(就是结构图里的各种Manager),这点在搜代码的时候会看到各种ServiceManager.java的类。这里Managers很大一部分都是开放出来的调用接口。
来看看SystemServer.java这个文件的一些函数,如下图:

在这里启动了各种类型的服务,下面这些都很熟悉吧?

这样是不是找到了各个Service的启动位置了。就是在这里,各个服务完成初始化,被调用了构造函数,以及最初被调用的那几个函数找到了。程序入口找到了,是不是可以解决一半问题了呢?

以上这些都是很长的文件,看起来头晕有木有啊。这里推荐一个Framework里最简单的Service——lightService,一共就以下几个文件。
./services/core/java/com/androID/server/lights/lightsManager.java
./services/core/java/com/androID/server/lights/light.java
./services/core/java/com/androID/server/lights/lightsService.java
这个就是控制一闪一闪LED的控制接口了。每个代码不超过百行,但是也代表了一共典型的Service在Framework里面是种怎样的存在吧。

至于你的那些问题,就是要跟着函数调用慢慢走,慢慢看吧。

学习程序最需要会的一点就是–抽象。不管是写还是看。

除此之外还需深入解析:WMS、AMS、PMS、NMS、inputSystem等相关实现

AndroID事件分发机制:帮助你在写复杂自定义控件时协助解决事件冲突。

VIEw的测量布局和绘制机制,熟练掌握画布Canvas API、AndroID坐标系、触控事件等,熟悉绘图技巧、熟悉滑动原理。

AndroID动画:熟练掌握动画Tween Animation、Frame Animation、Property Animation,有助于你写出交互体验好的自定义控件。

AndroID多线程通信原理、线程控制、线程池、掌握Handler、Looper、ThreadLocal、Thread、Runnable、AsyncTask、HandlerThread、IntentService、Future、FutureTask、Callable等,掌握Java并发编程。

5.掌握AndroID进程间通信原理,试着分析Binder工作机制。

6.了解Activity启动过程,可以从startActivity()一步一步分析源码,过程不必拘泥于实现细节,掌握大致流程即可。

7.了解四大组件工作过程,和上面一个一样,从源码分析,一步一步来看WMS、AMS、PMS、NMS等如何通过binder完成进程间通信。

8.了解window创建过程、掌握window添加删除更新机制。

9.理解Context;如Application对应的Context、Activity对应的Context、Service对应的Context以及Context之间的关系

10.掌握AndroID资源加载机制用的比较多的Java辅助知识点:

并发编程:线程池、ThreadLocal、Future、FutureTask、Callable等2.Java动态代理(cglib/jdk)、反射3.Java IO、集合类4.序列化5.注解6.IOC和AOP7.类加载器

本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…

AndroIDFramework精编内核解析 点击我的GitHub 前往下载!

总结

以上是内存溢出为你收集整理的Android Framework源码当中哪些类有必要进行深入学习?全部内容,希望文章能够帮你解决Android Framework源码当中哪些类有必要进行深入学习?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1060853.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存