• 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 前往下载!

  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    领导满意的高逼格报告,可视化吊打Excel,仅用5步就能教会你
    TTL
    s.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 1, 0))
    s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 0)
    VSCode的配置和插件同步到多台电脑
    C 语言编程 — 高级数据类型 — void 类型
    C 语言编程 — 高级数据类型 — 字符串
  • 原文地址:https://www.cnblogs.com/Android-Alvin/p/13951996.html
Copyright © 2020-2023  润新知