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

news/2024/7/7 5:39:13 标签: Android, Framework, binder, handler, ams

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

两年 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 中已收录,里面包含不同方向的自学编程路线、面试题集合/面经、及系列技术文章等,资源持续更新中…
<a class=Android framework精编内核解析学习手册" />AndroidFramework精编内核解析 点击我的GitHub 前往下载!


http://www.niftyadmin.cn/n/543857.html

相关文章

Android开发中Eclispe相关问题及相应解决(持续更新)

1.Eclipse项目中的Android Private Libraries没有自动生成。 一般而言&#xff0c;在Android开发中&#xff0c;项目中引用到的jar包会放到项目目录中的libs中&#xff0c;引入库会放到Android Dependencies中&#xff0c;对于放置于libs中的jar包&#xff0c;会自动置于项目中…

40岁安卓开发失业半年找工作被拒含泪离开,HR:技术栈落后,哭也没用

突然失业是一件令人挺难过的事情。现在找工作不容易&#xff0c;特别是那些到了一定年龄的人&#xff0c;毕竟这类型的人群有了家庭有了孩子&#xff0c;责任也变得很大。但是没有人不会变老&#xff0c;这也是不可逆的。社会非常残酷&#xff0c;要是你没点价值&#xff0c;那…

CNN网络介绍与实践:王者荣耀英雄图片识别

欢迎大家前往腾讯云社区&#xff0c;获取更多腾讯海量技术实践干货哦~ 作者介绍&#xff1a;高成才&#xff0c;腾讯Android开发工程师&#xff0c;2016.4月校招加入腾讯&#xff0c;主要负责企鹅电竞推流SDK、企鹅电竞APP的功能开发和技术优化工作。本文发表于QQ会员技术团队的…

linux 浏览查看文件more,less,head,tail,cat,tac,od,nl命令使用简介

参考&#xff1a;linux 基本命令详解 cat,tac,nl,more,less,head,tail,od 命令more,less,head,tail,cat,tac,od,nl等是是使用Linux系统常用的几个浏览与查看文件命令。其中more,less,tail我最常用。 如果我们要查阅一个档案的内容时&#xff0c;该如何是好呢&#xff1f;这里有…

Intent意图 用于Activity之间的数据传递

用于Activity之间的数据传递 在起始Activity中&#xff0c;发送数据 protected void onCreate(Bundle saveInstanceState){ super.onCreate(saveInstanceState); setContentView(R.layout.thisactivity); Intent intent new Intent(); //设置起始Activity和目标Activity,表示数…

Altium Designer极坐标布局方法

源&#xff1a;Altium Designer极坐标布局方法

开源:Hardcoder——安卓APP与系统间通信解决方案

Hardcoder 的诞生 随着微信越来越复杂&#xff0c;性能优化变得越来越难做&#xff0c;优化所带来的效果提升也越来越不明显。所以我们⼀直在思考&#xff0c;该如何突破这个优化的极限? 直到有一次与厂商的交流我们了解到&#xff0c;部分厂商会针对微信做一些小改动&#…

中年妇女的程序员职场路怎么走?

近日逛社区看到了这样一则帖子&#xff1a; 87年&#xff0c;女。在一线城市互联网做技术近8年&#xff0c;做到小管理&#xff0c;后来因为加班太多想喘口气&#xff0c;喘大了&#xff0c;两个月前跳槽到有编制的中职院校。 现在又想跳出来&#xff0c;学校里事情也多&#x…