Android 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等相关实现

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

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

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

  4. 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辅助知识点:

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

本文在开源项目:https://github.com/Android-Alvin/Android-LearningNotes 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
Android framework精编内核解析学习手册AndroidFramework精编内核解析 点击我的GitHub 前往下载!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值