android_学习向导

横看成岭侧成峰,远近高低各不同,不识庐山真面目,只缘身在此山中。

下面的都不是我写的,只是迷茫的时候给自己灌输的心灵鸡汤,感谢这些乐于助人的大神们!

1. 要想快速并高效地阅读源码,一定要有好方法,不然看着会挺费劲,当然,用什么方法取决于具体的情况。

 

1.1、一边阅读代码一边写注释。这是我用过的最好的方法,对代码理解得更深入,看一些重要代码或者特别难懂的代码时挺有用。更何况,注释也是一种文档嘛。

1.2、一边阅读代码一边绘制UML。这个方法适用于类之间的关系较复杂和调用层次较深的情况,我一般都是先绘制顺序图,然后为顺序图中的类绘制关系图。

1.3、通过Debug来跟踪程序的主要执行过程,这样就可以分清主次了,阅读的时候更有针对性。

1.4、类的快速阅读。先弄清楚它在继承链中的位置,看看它的内部状态,也就是成员变量,一般来说,类的对外接口都是对成员变量的访问、加工、代理等,然后看看它的对外接口,也就是公有成员函数,识别核心的一个或多个函数,这时候你应该可以大概了解这个类的职责或作用了。可能这个类是某个设计模式中的一个组成部分,所以,设计模式的掌握对代码的快速阅读也是很有帮助的。

1.5、带着问题去阅读。比如想了解android中的消息机制,那么看看Looper、Handler、MessegeQueue这几个类就可以了,其他的不要去看,要不然就跑题了。


2.Android 开发学习路线的七大阶段:

第一阶段:Java面向对象编程

1.Java基本数据类型与表达式,分支循环。

2.String和StringBuffer的使用、正则表达式。

3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类,Java的垃极回收机制,Javadoc介绍。

4.对象实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析;对象的多态性:子类和父类之间的转换、抽象类和接口在多态中的应用、多态带来的好处。

5.Java异常处理,异常的机制原理。

6.常用的设计模式:Singleton、Template、Strategy模式。

7.JavaAPI介绍:种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。

8.Java集合介绍:Collection、Set、List、ArrayList、Vector、LinkedList、Hashset、TreeSet、Map、HashMap、TreeMap、Iterator、Enumeration等常用集合类API。

9.Java I/O输入输出流:File和FileRandomAccess类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。

10.Java高级特性:反射、代理和泛型。

11.多线程原理:如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁。

12.Socket网络编程。


第二阶段:Java Web开发

1.Java解析XML文件DOM4J。

2.MySql数据库的应用、多表连接查询的应用。

3.Jsp和Servlet应用。

4.Http协议解析。

5.Tomcat服务器的应用配置。

6.WebService服务配置应用。

 

第三阶段:android UI编程

1、Android开发环境搭建:Android介绍,Android开发环境搭建,第一个Android应用程序,Android应用程序目录结构。

2、Android初级控件的使用:

TextView控件的使用

Button控件的使用方法

EditText控件的使用方法

ImageView的使用方法

RadioButton的使用方法

Checkbox的使用方法

Menu的使用方法

3、Android高级控件的使用:

Autocompletion的使用方法

ListView的使用方法

GridView的使用方法

Adapter的使用方法

Spinner的使用方法

Gallary的使用方法

ScrollView的使用方法

4、对话框与菜单的使用:

Dialog的基本概念

AlertDialog的使用方法

DatePickerDialog的使用方法

Menu的使用方法

自定义Menu的实现方法

5、控件的布局方法:

线性布局的使用方法

相对布局的使用方法

表格布局的使用方法

6、多Acitivity管理:

AndroidManifest.xml文件的作用

Intent的使用方法

使用Intent传递数据的方法

启动Activity的方法

IntentFilter的使用方法

Activity Group的使用方法

7、自定义控件实现方法:

自定义ListView的实现方法

可折叠ListView的使用方法

自定义Adapter的实现方法

自定义View的实现方法

动态控件布局的上实现方法

 

第四阶段:android网络编程与数据存储

1、基于Android平台的HTTP通讯:

Http协议回顾

Apache Commons 工具包介绍

使用Get方法向服务器提交数据的方法

解析服务器响应数据的方法

使用POST方法向服务器提交数据的实现方法

向服务器提交非文本数据的实现方法

使用Http协议实现多线程下载

使用Http协议实现断点续传

2、Android数据存储技术:

SQLite3数据库简介

SQL语句回顾

SQLite3编程接口介绍

SQLite3事务管理

SQLite3游标使用方法

SQLite3性能分析

访问SDCard的方法

访问SharedPreferences的方法

3、ContentProvider使用方法:ContentProvider实现共享数据、URI的解析与UriMatcher、ContentUris的使用、使用ContentResolver操作ContentProvider、ContentProvider的监听Android当中的异步操作:Handler的使用方法;异步任务的基本概念;AsyncTask的使用方法。

 

第五阶段:android手机硬件管理

1、地图及定位技术:GPS简介;LocationManager的使用方法;在Google Map上添加标记的方法;查询某地附近建筑的方法;使用Google Map实现点对点导航。

2、传感器使用方法:方向、加速度(重力)、光线、磁场、距离、温度等传感器的使用。

3、近场通信技术:NFC技术简介;NFC技术是用场景介绍;NFC技术实现方法。

4、媒体管理技术:MediaPlayer的使用方法。

5、触摸屏技术:手势识别;多点触摸技术。

第六阶段:Android图形编程技术

1、图形处理基础:2D图形编程基础;

2、点、线、面等基本图形元素绘制方法;

3、Android动画框架简介;

4、位移动画的实现方法;

5、淡入淡出动画的实现方法;

6、旋转动画的实现方法;

7、Matrix的使用方法。

第七阶段:Android游戏开发

1、Android游戏开发:Android游戏开发概述;

2、SurfaceView的使用方法;

3、物理小球技术;

4、碰撞检测技术;

5、图片、文字和背景音乐等资源的使用方法;

6、游戏引擎基础概念;

7、Cocoa2d-Android引擎使用方法;

8、OpenGL ES使用方法。

 

AndroidFramework 如何学习,如何从应用深入到Framework?

做过三年framework,自身总结了一套学习方法,大致如下三点。勤加练习,一般性模块可以看的非常快。
1、高度抽象,构建框架
2、重要函数,深究细节
3、善用工具,及时总结

Android源码非常庞大,但设计很精妙。纵向分层,横向模块化,使得整个源码更易更新和维护。在手机厂商做framework的更倾向于说自己是做Android系统的,维护的模块主要包括ActivityManagerService、WindowManagerService、PackageManagerService、PowerManagerService、SurfaceFlinger、通信模块、多媒体模块等。Android系统良好的模块化设计使得各个模块负责人只需搞懂自己的模块就可以胜任工作。但是搞定自己的模块并不那么容易,对于新人一般要大概做半年才能掌握其精要,有的做了一年发现还有很多点没有掌握,这也是很常见的。

对于应用开发者来说,他们并不需要修改系统代码,学习framework只是为了了解并理解某个API调用底层的运行机制,要学到这个深度级别还是比较容易的。

首先必须了解一些背景知识。1⃣️Android系统采用C/S架构;2⃣️绝大部分IPC通信采用Binder通信;3⃣️核心Service大多运行在System_server进程;4⃣️核心Service代码大部分都在frameworks/base/services目录下;⑤别一上来就看Binder!!!6⃣️别一开始看源码就钻牛角尖!!!

以下便是我的学习方法,不保证适合其他人,供参考。

首先,大概了解下该Service是干什么的。我会搜一些好的分析文章收藏起来,大概浏览下该Service为上层应用提供了什么功能?(这些文章并不会去挨个读,这跟绝大多数人习惯不一样,他们一般是一边看分析文章一边看源码)。在源码里找到源码文件,大概看下核心几个文件开头的注释,注释一般会说的非常清楚这个是干嘛的。(我用source insight看源码)

然后,可以尝试写一个小demo,方便调试Service内部方法或抓取系统日志来追踪代码流程。运行在system_server进程中的Java代码均可使用Android studio调试,当然必须是自己编译的image才行。MTK平台手机部分service是可以通过adb shell dumpsys XXX log XX来开启对应service的log。

接着,从核心API调用入手,一步一步分析源码,理出一个从应用端到Service端,最后回到应用端的函数调用链。这条调用链必定很长很长,有非常多的分支,还会出现非常多的类,这个时候就要抓住主线不放,细枝末节可以不管。借助UML工具了,一般画两个图就够了,一个是类图,一个是时序图。画图要精简,只画重要的主线分支时序图和主要的类关系。这个步骤最难的是理出主线分支调用,切记钻牛角尖偏离目标任务,只需理出一个client-->service-->client的框架即可。将时序图画出来后,整个框架便构建出来了。(我用starUML工具)

然后,在上面的框架中必定有几个非常关键的函数,把它搞定。搞定方法就是一行一行读代码,读懂每一行并不容易,需要联系上下文进行理解。从重要函数中要理清service是如何管理target的,比如AMS是使用Stack和Task来管理Activity的,使用两个队列来处理广播,扮演连接者将client和目标ContentProvider建立起连接等。这个过程也是最花时间的,因为你需要从源码里面尽可能地还原作者的设计思想,还原的越彻底,理解的越透彻。一般我是一边理解一边用笔记记录自己的理解。(我用有道云笔记)

最后,整理出一篇笔记,方便以后回顾。在前面两步做完,图有了,分析也有了,稍微整理下便成了一篇文档。一般情况下是这样的,今天你理解的差不多了,一个月后你估计只记得大概个轮廓,细节全忘了,两个月后估计连轮廓都忘了。相信我,这时最管用的就是那两个图了,一看就能让你想起80%,所以我非常喜欢画类图和时序图。

最后的最后,将最开始搜集的那些文章利用零碎时间看一遍,相信我你会发现很多文章分析并不那么准确。做完这些以后有什么想更进一步理解的点,只需花极少时间便能搞定,对于写作能力好的,便可以发文章了







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值