前段时间收到了一个网友询问我:
两年 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和AOP
- 7.类加载器
本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
AndroidFramework精编内核解析 点击我的GitHub 前往下载!