• Android 学习之路

    2016-07-10 21:24:43
    这篇博客背后的故事一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在知乎上记录一路走来的历程,很励志,希望能给那些正在或准备走编程行业的人一些正能量,内容有点长,感兴趣的可以...

    这篇博客背后的故事

    一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在知乎上记录一路走来的历程,很励志,希望能给那些正在或准备走编程行业的人一些正能量,内容有点长,感兴趣的可以当做励志小说阅读吧。


    收到一些朋友的微博私信,说能不能给Android新手们一些指导,我只能说指导谈不上,毕竟我也很多东西正在学习中,与此同时一大学同学准备转行Android,可以说是从头开始,那么我就姑且以一个过来人的身份给一些建议吧,只希望在学习的过程中能够少走写弯路吧。

    硬件

    • 电脑–推荐Mac

    首先声明我不是果粉,个人Windows,Linux,Mac OX系统均用过, 只能说Windows上面的开发工具简直难以恭维,尤其命令行超级难用,而Linux自己必须得花不少时间在折腾中,更是不适合新手了,Max OS是我认为迄今为止最好用的系统,没有之一, 所以如果你不差钱的话,强烈建议入手一台Mac,推荐Pro系列, 当然它的价格确实比较昂贵,如果暂时入手有困难,推荐以后手头宽裕的时候再入手吧,会带给你质的体验。(Google的工程师们都在用Mac,应该比较有说服力吧)

    • 手机–推荐Nexus 5

    做Android开发最难以忍受的就是那龟速的模拟器,强烈推荐入手我Google的Nexus系列,原生rom,性价比超高,有条件的推荐再入手一台小米或三星之类的,不是因为他们有多好用,而是因为目前市场上这两个品牌的手机份额最大,实际开发中可能需要进行适配与测试,总之你需要有台Android手机。你可能还需要知道魅族手机有个SmartBar的东东,虽然我认为确实很SB。最后你实在还是要用模拟器的话,那么姑且就给你推荐一款比较快速的模拟器吧—-Genymotion, 具体的见我这篇博客一个强大的Android模拟器Genymotion

    书籍

    书不在多,适合你就好,其实市面上的书籍大部分都差不多,没有本质的区别,所以书必要要有,但不推荐一次性买太多。这里推荐几本我认为比较好的书籍,点击可以直接购买。

    郭神的最新力作,郭神的博客很棒,书我也买了看了一部分,非常棒,适合新手,而且是针对Android 4.0进行讲解的。

    当年我学习的时候就看的这本书,现在出了第二版了,这本书的优点是讲的很细,代码较多,你可以跟着代码一步步敲,缺点就是篇幅太多,导致书太厚了,携带不方便,书中最后的几个实例教程不是那么好,不知道第二版更改没。

    Thinking In Java是Java的经典书籍,这是一本值得反复看的书籍,针对有一定Java基础的人,可以说是学习Java语言必备的书籍。

    Effective Java是Java进阶必备书籍,看后绝对会让你对Java有了更深的认识。

    补充:鉴于很多小伙伴让推荐Java学习的初级资料,Thinking In Java确实是本好书,但好书一般都不是针对初学者的,所以如果你没有任何编程经验,那么我来给你推荐几本Java基础书籍,就不提供购买链接了,大家自行搜索去购买。

    • 《疯狂Java讲义》(李刚),《JAVA面向对象编程》(孙卫琴),《Java开发实战经典》(李兴华),《Core Java》

    这几本书都是针对初学者的,我都没有看过,但是我自己稍微做了了解,最后,这些书买一本就够了,然后配合视频学习,小白入门不是梦。

    开发环境

    目前强烈推荐Android开发者使用,抛弃Eclipse拥抱未来吧!这是Google最新推出的Android开发工具,基于IDEA,编译依赖Gradle,目前已经推出1.0正式版,这是Android开发工具的未来,所以身为Android开发者有必要花点时间去学习使用它,亲身经历,自从使用它之后再也不想去碰Eclipse。

    为此我也推出了Android Studio的一些列学习教程,堪称史上最详细:

    Android Studio系列教程一 —- 下载与安装

    Android Studio系列教程二 —- 基本设置与运行

    Android Studio系列教程三 —- 快捷键

    Android Studio系列教程四 —- Gradle基础

    Android Studio系列教程五–Gradle命令详解与导入第三方包

    Android Studio系列教程六–Gradle多渠道打包

    翻墙

    俗话说,不会翻墙的程序员不是好程序员,尤其最近Google各项服务被屏蔽,以上IDE的下载也就都需要翻墙,这里推荐一个靠谱的VPN吧,支持多设备MAC, Windows, Android, iPhone等, 如果和小伙伴们一起合买的话每月只要几块钱,圈内的朋友们都在用,如果你通过下面链接购买的话,你和我的账户都会增加10元钱。

    云梯VPN

    如果无论如何你都不想翻墙的话,这里github上可以直接下载以上Android开发工具

    AndroidDevTools

    Google Android官方教程

    Android Training Course in Chinese

    视频推荐

    在这里我必须强烈推荐新手们结合视频学习,身为过来人我的很清楚一开始入门很难,只是看书或者资料难以理解,而这时候结合视频讲解,加上自己的书籍与实战,会起到事半功倍的效果。所以不要小看了视频的作用,当然现阶段的我完全不需要去看视频,因为视频讲解的有些慢,但是对于新手们的作用非常巨大。视频学习有很多,但大都差不多,我也没法推荐最好的给你,只是以我自己的角度觉得质量还不错,推荐如下Android视频学习。

    Android视频学习推荐

    Android基础

    上面可能是一个比较全面系统的培训教程,对于新手们可能对某些需要着重掌握的东西比较迷茫,于是整理下个人认为新手们必须要掌握的知识点,顺便也会附带相应觉得不错的讲解博客地址。

    Activity实际开发中使用频率最高,这个必须要理解

    Android中的四大组件必须得知道,也是面试常问到的

    ListView是所有控件中最常使用且对新手来说比较复杂的用法,各种Adapter的使用以及ListView的优化都是必须掌握的

    Intent解决了Android中四大组件的通讯,非常有用,这篇博客收集整理了系统的标准Intent

    介绍一些Android屏幕适配的基础

    Android中的SQLite需要掌握,这篇博客很适合新手

    3.0之后新加的Fragment,必须要掌握,目前使用的场景也是越来越普遍了

    Android中级

    Android的应用程序的生命周期需要理解,面试也是经常会被问的

    View做为UI开发中最常用到的,必须要深入理解

    Service作为Android四大组件之一,在每一个应用程序中都扮演着非常重要的角色

    目前比较常用比较流行的数据格式就是json了,这篇博客教你如何使用Google Gson库来进行json解析

    Android开发中经常会用到xml布局,那么布局优化方面的知识更是需要掌握的了

    详细讲解了Android中Intent中如何传递对象

    Android开发中异步操作是经常使用的,必须理解掌握

    Android异步操作的另一种方法

    很早的一个小demo,教你如何做一个App的Loading动画

    Android进阶

    Google官方Android新的构建系统,可以很方便的管理依赖、编译打包等

    一系列的性能调优教程,让你的代码以及App更畅通!

    一个开源客户端,教你使用Studio、Gradle以及一些流行的开源库快速开发一个不错的Android客户端

    自己整理的一些Android开发资源,包括开发、工具、设计等,相信会对你有用的

    Android设计

    在开发一款Android App之前,你需要了解下Android平台的设计规范,这里有Google最新推出的Material Design中文翻译版

    Android兼容库

    在了解了设计规范准备着手开发你的App时,你还需要考虑你的App支持的版本,如果是全新的App,从目前的市场份额来看,建议直接支持4.0+,虽然2.3的份额仍然有一部分,但是这部分真正用来使用App的人又能有多少呢。当然如果你的公司必须要求支持2.x的版本,那么也不用担心,下面整理了几个满足你适配的一些兼容库:

    大神JakeWharton的一个ActionBar的兼容库,支持在2.x版本使用ActionBar

    在这之前使用ActionBar基本都会使用上述JakeWharton的兼容库,但是目前Google有了自己的一套ActionBar兼容库,推荐使用ActionBar Compact,具体介绍及使用方法详见我的这篇博客

    Android 3.0之前开放的一些新的动画api–Property Animation,大神JakeWharton的又一大作,可以让你在2.x版本的sdk可以使用属性动画.

    如果需要兼容2.x的版本,在使用如下类的时候你需要使用v4包下的,如Fragment, FragmentManager, FragmentActivity, FragmentPagerAdapter, CursorLoader, LoaderManager, AsyncTaskLoader

    当然v4包下面除了以上还有一些新的控件你必须知道

    Navigation Drawer(导航抽屉)

    在这之前在Android上实现一个抽屉导航你可能会用到SlidingMenu开源库,如今你可以使用官方的DrawerLayout控件很容易实现

    SlidingPaneLayout

    SlidingPaneLayout是V4包中新添加的组件,可以实现两列面板的切换, 具体使用与效果见博客链接

    SwipeRefreshLayout

    SwipeRefreshLayout是Google在support v4 19.1版本的library更新的一个下拉刷新组件,使用起来很方便,可以很方便的实现Google Now的效果

    Android开发必知的一些开源库

    说到开源库就不得不提GitHub,只能说是目前最活跃的开源社区,不知道的赶紧去注册个账号使用起来,绝对是你快速提升技术的利器。

    Volley

    App开发中免不了要和服务端进行交互,而volley是Google官方推出的一个开源的网络通信库,它能使网络通信更简单,更快速。

    ActiveAndroid

    ActiveAndroid算是一个轻量级的ORM(对象关系映射(Object Relation Mapping))框架,简单地通过如save()和delete()等方法来做到增删改查等操作。

    Retrofit

    Retrofit和Java领域的ORM概念类似, ORM把结构化数据转换为Java对象,而Retrofit 把REST API返回的数据转化为Java对象方便操作。同时还封装了网络代码的调用。

    Android-Universal-Image-Loader

    Android-Universal-Image-Loader是一个强大的开源图片异步加载库,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。

    Android开源项目分类汇总

    非常全面的GitHub开源项目汇总,不需要重复发明轮子,尽情遨游在开源世界里吧

    关于我

    非科班转投编程,Android开发者,Google脑残粉,热爱开源,分享Android方面的知识、技术、见闻

    展开全文
  • 作者:Android开发666 链接:https://zhuanlan.zhihu.com/p/20810699 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 一、前言 不知不觉自己已经做了几年开发了,由记得...
    作者:Android开发666
    链接:https://zhuanlan.zhihu.com/p/20810699
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    一、前言

    不知不觉自己已经做了几年开发了,由记得刚出来工作的时候感觉自己能牛逼,现在回想起来感觉好无知。懂的越多的时候你才会发现懂的越少。

    如果你的知识是一个圆,当你的圆越大时,圆外面的世界也就越大。

    最近看到很多Android新手问Android学习路线,学习方法啊,如何入门啊,所以我从网上找了一些资料,然后以我的工作经验给大家总结一下,让你们少走弯路,提取一些工作中经常用到的技术。

    二、学习知识汇总

    1、Java se基础

    1).Java基本数据类型与表达式,分支循环。
    2).String和StringBuffer的使用、正则表达式。
    3).面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this关键字、方法和方法的参数传递过程、static关键字、内部类。
    4).对象实例化过程、方法的覆盖、final关键字、抽象类、接口、继承的优点和缺点剖析;对象的多态性:子类和父类之间的转换、抽象类和接口在多态中的应用、多态带来的好处。
    5).Java异常处理,异常的机制原理。
    6).常用的设计模式:Singleton、Template、Strategy模式。
    7).JavaAPI介绍:种基本数据类型包装类,System和Runtime类,Date和DateFomat类等。
    8).Java集合介绍:Collection、Set、List、ArrayList、LinkedList、Hashset、Map、HashMap、Iterator等常用集合类API。
    9).JavaI/O输入输出流:File和FileRandomAccess类,字节流InputStream和OutputStream,字符流Reader和Writer,以及相应实现类,IO性能分析,字节和字符的转化流,包装流的概念,以及常用包装类,计算机编码。
    10).Java高级特性:反射和泛型。
    11).多线程原理:如何在程序中创建多线程(Thread、Runnable),线程安全问题,线程的同步,线程之间的通讯、死锁。

    2、android UI编程

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

    2)、Android初级控件的使用:

    TextView控件的使用
    Button控件的使用方法
    EditText控件的使用方法
    ImageView的使用方法
    RadioButton的使用方法
    Checkbox的使用方法
    Menu的使用方法

    3)、Android高级控件的使用:

    ListView的使用方法
    GridView的使用方法
    Adapter的使用方法
    Spinner的使用方法
    Gallary的使用方法
    ScrollView的使用方法
    RecyclerView

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

    Dialog的基本概念
    BlockquoteAlertDialog的使用方法
    DatePickerDialog的使用方法
    Menu的使用方法
    自定义Menu的实现方法

    5.控件的布局方法:

    线性布局的使用方法
    相对布局的使用方法

    6.多Acitivity管理:

    AndroidManifest.xml文件的作用
    Intent的使用方法
    使用Intent传递数据的方法
    启动Activity的方法
    IntentFilter的使用方法
    Activity Group的使用方法

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

    自定义ListView的实现方法
    可折叠ListView的使用方法
    自定义Adapter的实现方法
    自定义View的实现方法
    动态控件布局的上实现方法
    上拉刷新下拉加载更多

    3、android网络编程与数据存储

    1).基于Android平台的HTTP通讯:

    Http协议回顾
    使用Get方法向服务器提交数据的方法
    使用POST方法向服务器提交数据的实现方法
    使用Http协议实现多线程下载
    使用Http协议实现断点续传

    2).Android数据存储技术:

    SQLite3数据库简介
    SQL语句回顾
    SQLite3编程接口介绍
    SQLite3事务管理
    SQLite3游标使用方法
    SQLite3性能分析
    访问SDCard的方法
    访问SharedPreferences的方法

    参考自:Android学习路线

    三、进阶之路(初级->中级->高级)

    1、初级工程师

    小明之前完全没接触过Android开发,是个应届生,他的待遇是13k,然后小明以校招的身份进入了百度,然后小明需要怎么学习才能成为初级工程师呢?这个时候,小明对编程基础、数据结构、C语言都有一定基础,Java语法什么的也都掌握的比较好,Android才有java语言,无奈的是小明并不会搞Android。

    小明首先需要购买一本Android入门的书籍,为了更快地学习Android,小明业余时间也都用来一边看书一边照着书中的例子敲代码,结果2周时间小明就把这本书学了一遍。看完这本书后,小明对Android的历史、结构、代码规范等都有了一个大概的了解,并且,小明已经可以写出一些简单的Activity了。这个时候在小明眼里,Android开发很简单很好玩,通过在xml中摆放一些按钮文本框什么的就可以做一些界面了。

    小明开始跟着他的技术导师做需求,一些简单的小需求小明自然是不在话下了。突然有一天来了一个需求,该需求要求小明在Activity中为一个button加一个动画效果,小明慌了:“完全没接触过,书上也没有讲,怎么办呢?”小明冷静了下,打开了百度搜索,输入“Android 动画”,打开前几个链接,小明恍然大悟,照着网上的例子把需求给实现了。后来导师告诉他:“学好Android,官方文档是必须看的,既全面又权威”。然后小明如获至宝,花了一年时间把上面的guide和training都看了一遍,并且他还动手抄了几个小例子。

    有一天,小明又需要做一个动画相关的需求,这可难不倒小明,它熟练地打开了百度一下,你就知道,输入“Android 动画”,突然他楞了一下:”总不能每次写动画都要百度一下吧!“,于是他在CSDN开了一个博客,把动画相关的知识点都写上去,为的是后面再写动画相关的代码就不用百度去搜了,事实如何呢?后面再写动画相关的代码,小明的确不用再去百度搜了,因为通过写一篇动画博客,他把动画相关的细节都已经记住了,这样他就可以不用再去参考任何文档了,后来小明还学会了把一些琐碎的不方便放在博客上的东西写到了印象笔记上面,什么时候忘了10秒钟以内都可以快速找回来,而不是花10分钟去再次搜索一遍。

    这里总结一下,Android入门的时候,需要有一本入门书,好好学习书中的内容,同时花一年时间把Android官方文档中的training和guide看一遍,同时通过写博客和记笔记的方式来做总结,建议让自己的每篇博客都有价值些。通过一年时间的学习,相信每个人都可以达到中级工程师的水平。

    技术要求:

    • 基本知识点
      比如四大组件如何使用、如何创建Service、如何进行布局、简单的自定义View、动画等常见技术
    • 书籍推荐
      《第一行代码 Android》、《疯狂Android》

    2、中级工程师

    小明经过一年的努力学习终于成为Android中级工程师了,月薪变成了17k。到了中级工程师,已经可以在公司里干很多体力活了,但是一些很重要的任务小明还不能一个人承担起来,这个时候小明需要学习的内容就很多了,如下所示:

    • AIDL:熟悉AIDL,理解其工作原理,懂transact和onTransact的区别;
    • Binder:从Java层大概理解Binder的工作原理,懂Parcel对象的使用;
    • 多进程:熟练掌握多进程的运行机制,懂Messenger、Socket等;
    • 事件分发:弹性滑动、滑动冲突等;
    • 玩转View:View的绘制原理、各种自定义View;
    • 动画系列:熟悉View动画和属性动画的不同点,懂属性动画的工作原理;
    • 懂性能优化、熟悉mat等工具
    • 懂点常见的设计模式

    学习方法

    阅读进阶书籍,阅读Android源码,阅读官方文档并尝试自己写相关的技术文章,需要有一定技术深度和自我思考。在这个阶段的学习过程中,有2个点是比较困扰大家的,一个是阅读源码,另一个是自定义View以及滑动冲突。

    如何阅读源码呢?这是个头疼的问题,但是源码必须要读。阅读源码的时候不要深入代码细节不可自拔,要关注代码的流程并尽量挖掘出对应用层开发有用的结论。另外仔细阅读源码中对一个类或者方法的注释,在看不懂源码时,源码中的注释可以帮你更好地了解源码中的工作原理,这个过程虽然艰苦,但是别无他法。

    如何玩转自定义View呢?我的建议是不要通过学习自定义view而学习自定义view。为什么这么说呢?因为自定义view的种类太多了,各式各样的绚丽的自定义效果,如何学的玩呢!我们要透过现象看本质,更多地去关注自定义view所需的知识点,这里做如下总结:

    • 搞懂view的滑动原理
    • 搞懂如何实现弹性滑动
    • 搞懂view的滑动冲突
    • 搞懂view的measure、layout和draw
    • 然后再学习几个已有的自定义view的例子
    • 最后就可以搞定自定义view了,所谓万变不离其宗

    大概再需要1-2年时间,即可达到高级工程师的技术水平。我个人认为通过《Android开发艺术探索》和《Android群英传》可以缩短这个过程为0.5-1年。注意,达到高级工程师的技术水平不代表就可以立刻成为高级工程师(受机遇、是否跳槽的影响),但是技术达到了,成为高级工程师只是很简单的事。

    技术要求:

    • 稍微深入的知识点
      AIDL、Messenger、Binder、多进程、动画、滑动冲突、自定义View、消息队列等
    • 书籍推荐
      《Android开发艺术探索》、《Android群英传》

    3、高级工程师

    小明成为了梦寐以求的高级工程师,月薪达到了20k,还拿到了一丢丢股票。这个时候小明的Android水平已经不错了,但是小明的目标是资深工程师,小明听说资深工程师月薪可以达到30k+。

    为了成为Android资深工程师,需要学习的东西就更多了,并且有些并不是那么具体了,如下所示:

    • 继续加深理解”稍微深入的知识点“中所定义的内容
    • 了解系统核心机制:
    1. 了解SystemServer的启动过程
    2. 了解主线程的消息循环模型
    3. 了解AMS和PMS的工作原理
    4. 能够回答问题”一个应用存在多少个Window?“
    5. 了解四大组件的大概工作流程
    • 基本知识点的细节
    1. Activity的启动模式以及异常情况下不同Activity的表现
    2. Service的onBind和onReBind的关联
    3. onServiceDisconnected(ComponentName className)和binderDied()的区别
    4. AsyncTask在不同版本上的表现细节
    5. 线程池的细节和参数配置
    • 熟悉设计模式,有架构意识学习方法

    这个时候已经没有太具体的学习方法了,无非就是看书、看源码和做项目,平时多种总结,尽量将知识融会贯通从而形成一种体系化的感觉。同时这个阶段对架构是有一定要求的,架构是抽象的,但是设计模式是具体的,所以一定要加强下设计模式的学习。关于设计模式的学习,最近一本新书推荐给大家《Android 源码设计模式解析与实战》,既可以学习设计模式,又可能体会到Android源码中的设计思想,我最近也在阅读此书。

    技术要求:

    • 稍微深入的知识点
    • 系统核心机制
    • 基本知识点的细节
    • 设计模式和架构
    • 书籍推荐
      《Android开发艺术探索》、《Android 源码设计模式解析与实战》、《Android内核剖析》

    参考自:Android学习路线指南

    四、学习视频跟书籍

    当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的,我这里给你们整理了大概80G的学习视频跟书籍,赶快点我点我点我。。。下载。。

    如果你想第一时间看我们的后期文章,扫码关注公众号,每周不定期推送Android开发实战教程文章,你还等什么,赶快关注吧,学好技术,出任ceo,赢取白富美。。。。

    展开全文
  • 原因很多时候在于,Android的功夫,在Android之外。这是理解Android源码的“道”,也是我近几年来愈发强烈的感受。 至于“术”,我只想说大神博客也好,书也好,90%的讲述方式都是错误的——作者展示出Android源码...
     首先放个地图炮,任何光讲源码的书都是耍流氓,无一例外。作者或许是大神,或许对于每一个地方的每一处源码都烂熟于心,但并不代表他们可以写出一部好书。原因很多时候在于,Android的功夫,在Android之外。这是理解Android源码的“道”,也是我近几年来愈发强烈的感受。

    至于“术”,我只想说大神博客也好,书也好,90%的讲述方式都是错误的——作者展示出Android源码,然后告诉你这段是干嘛的,然后下一段……这样的书或博客,我个人看得非常痛苦,一开始我不明白为什么,工作了第三年,猛然明白,读起来痛苦的原因是倒转了因果。


    几乎所有代码or模块or系统的开发初衷,都是为了解决某一问题。如果你光看源码,哦这个是干嘛的,那里调用了哪个API,这样看毫无意义,这样的所谓“讲解”书也毫无意义。大把的《深入XXX》实际上都没有深入,因为他们并没有搞清或说清,这里有个什么样的问题,而这个部分模块or源码怎样解决了这个问题,以及曾经其余的系统上如何解决这个问题——更有甚者,他们讲完解决方案,然后再编个问题出来,且说的好像这个问题只有这唯一一种方案可解一样……


    就比如题主和很多答主提到的Binder机制,所有人都能说出来它是跨进程通信用的,可是你依然会看得想要吐血。包括很多blog讲起这部分,都有一种先有答案后编个问题出来的嫌疑,理解并不深入(尤其是上来就将Media部分的,大部分根本只讲了“怎么用”,完全没有“为什么”的部分,这也好意思起名字叫“深入理解XXX”)。

    你想搞明白,首先要忘了Binder。然后想想看,有什么样的方案实现一个跨进程通信的方式?最容易想到的,一个是“共享内存”的方式或是“共享磁盘文件”的方式。其余的方式呢?

    想不到去看看旧有的Linux系统上的演变过程,当你看到管道(Pipe)方式的实现,就会开始恍然大悟——原来还可以通过这样。然后你会更加理解UDS(Unix Domain Socket,非TCP/IP里面的那个socket,很多人会困惑与此)的出现,此刻你心里对于Server-Client端互相建立起IPC链接的过程才将变得明朗,甚至可以推出RPC(Remote Procedure Calls)的实现模型。

    到这里,你再去看Binder的实现,从宏观的模型开始,一切都变得异常清晰起来。对于Binder Client和Binder Service各自的角色有了理解,Binder驱动与ServiceManager的联动,就变得更加清楚——和UDS或者RPC是不是很类似?甚至更容易理解一些,如果更加抽象的形容,ServiceManager就像DNS一样,负责Client查询到BinderService的IP地址(这也就理解了为何ServiceManager的通信标志恒为0),而Binder驱动则是路由器的角色。

    然后细化下去,针对每一个模块本身的职责,询问更细节的实现,永远记住,先有的问题,之后才有的代码——这样才能理解为何Parcel是必要的(跨进程通信的高效序列化数据载体),为何IBinder或BpBinder是必须的,AIDL又是什么用——代码实现是新鲜的,但是有了之前的铺垫和对问题的预期,它们的出现才是可理解的。这是理解Android源码之“术”。

    当然,说起来容易,做起来难。

    整套模块看下来,抛开信息检索能力不谈,你需要补一些C++的基础,需要补计算机系统的基础,甚至需要理解设计模式——但不是说你成为任何一方的专家才能理解,只是随着一点点深入问题,随时去补课罢了。所以说跳着看书的能力是必须的,不是你想不想或者喜不喜欢的问题,它就是必须的——你唯一的问题就是愿不愿意让自己适应它,还是找个借口绕路。

    所以这个问题又回到了最初提出的观点——Android的功夫,在Android之外。你要想“理解”而非单纯的“知道”,想“学习”而非单纯的“记诵”,我觉得没有他路可走。

    总结起来就是:
    先理解模块对应的要解决的“问题”是什么,再去给问题找解决方案的思路去理解源码。
    理解源码的功夫不止在Android本身,也要提高Android之外的姿势水平。

    最后,继续鄙视那些玩了几个app、听说Android开发语言用Java就对Android嗤之以鼻的自大狂们——对于Android这个庞大的知识库来说,90%的人离入门都还差得远呢。 
    展开全文
  • 作者:林可锟链接:https://www.zhihu.com/question/26582745/answer/86755953来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。基础知识1、HTML + CSS 这部分建议在线教程 上学习,...
    作者:林可锟
    链接:https://www.zhihu.com/question/26582745/answer/86755953
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    基础知识
    1、
    HTML + CSS 这部分建议在线教程 上学习,边学边练.
    之后可以模仿一些网站做些页面。在实践中积累了一些经验后,可以系统的读一两本书,推荐《Head First HTML 与 CSS
    中文版》,这本书讲的太细了,我没能拿出耐心细读。你可以根据情况斟酌。
    2、Javascript 要学的内容实在很多,如果没有其他编程语言的基础的话,学起来可能要费些力,建议看《Javascript语言精粹》,JS是一门很混乱的语言,这本书能够帮助你区分哪些是语言的精华,哪些是糟
    粕,对于语言精华,应该深入学习。糟粕部分能看懂别人写的代码就行,自己就不用尝试了。
    有了以上基础,就可以进行一般的静态网页设计,不过对于复杂的页面还需要进一步学习。
    1、CSS。必看《精通CSS》,看完这本书你应该对:盒子模型,流动,Block,inline,层叠,样式优先级,等概念非常了解了。作为练习可以看下《CSS艺门之匠》这本书,它对标题,背景,圆角,导航条,table,表单等主题都有详细的介绍。
    2、Javascript。上面提到内容还不足以让你胜任JS编程。在有了基础之后,进一步学习内容包括:
    a) 框架。
    推荐jQuery,简单易用,上手jQuery即可完成一些简单的项目。学习方法也很简单,照着产品文档做
    几个页面就行了,不用面面俱到,以后遇到问题查文档就行了。框架可以帮你屏蔽浏览器的差异性,让你能更专注与Web开发学习的精髓部分。补充: 可以使用
    Codecademy 学习 Javascript,jQuery,用户体验真的很好(感谢 TonyOuyang )。
    b) Javascript 语言范式
    。这个名字可能并不恰当,只是我找不到可以描述“面向对象”,“函数式”这个两个概念的概念。Javascript不完全是一个面向对象的语言,它的很多
    设计理念都有函数编程语言的影子,甚至说如果你不用面向对象,完全可以把它理解成一门函数式编程语言。
    Javascript的很多语言特性,都是因为他具有函数式语言的特点才存在的。这部分推荐先学习面向对象的基本理论,对封装,继承,多态等概念要
    理解,维基百科,百度百科会是你的帮手,另外推荐《Object Oriented
    Javascript》,应该有中文版。对与函数式编程我了解的也不系统,不好多说,可以自己百度一下。
    c) Javascript 语言内部机制。必须弄清如下概念:JS
    中变量的作用域,变量传递方式,函数的定义环境与执行环境,闭包,函数的四种调用方式(一般函数,对象的方法,apply,call),以及四种调用方式
    下,‘this’指向的是谁。这部分内容你会在《Javascript语言精粹》中详细了解。另外,你必须理解 json。
    d) dom编程,这个Web前端工程师的核心技能之一。必读《Dom编程艺术》,另外《高性能 Javascript》这本书中关于dom编程的部分讲的也很好。
    e) Ajax编程,这是另一核心技术。Ajax建议在网上查些资料,了解这个概念的来龙去脉,百度百科,维基百科上的内容就足够了。真正编程是很容易的,如今几乎所有框架都对Ajax有良好的封装,编程并不复杂。
    f) 了解浏览器差异性。这部分包括CSS和js两部分,浏览器差异内容很多,建议在实践中多多积累。另外对于浏览器的渲染模式,DOCTYPE等内容应该系统学习。
    3、HTML5和CSS3 。HTML5规范已经于2014年10月28日发布了,移动端HTML5和CSS3已经得到了非常广泛的使用,必知必会呀。

    再进一阶 · 代码层面:
    有了以上知识,对于大多数小型网站,你应该已经可以写出能够工作的代码了。但要想成为更专业的前端,你还需继续努力。更高的要求大概还有四方面:1)易维护,2)可测试,3)高性能,4)低流量(移动端)。
    1)易维护。对于页面你该理解‘样式’,‘数据’,‘行为’三者分离,对应的当然就是CSS,HTML,js。对于js代码,你最好了解设计模式,重构,MVC等内容。
    2)可测性。
    3)高性能。必读《高性能Javascript》
    4)低流量。移动端关注比较多。
    5)对于想要学习前端的同学,尤其是自学的伙伴,自学并非永久的,假如没有定力的还是找个培训机构吧。
    再进一阶 · 工程层面:
    前端项目同样面临软件生命周期的各个环节,首先是代码管理,你必须学会使用Svn和Git。其次是代码的构建,如今前端代码构建已经不是简单的压缩一下了,需要进行依赖管理、模块合并、各种编译,比需要学会使用Grunt、Gulp等前端构建工具。

    对于前端开发,基本内容就这些了,可以根据自己的兴趣爱好选择性学习以下内容。
    1、交互设计。大公司依然有专业人士搞这些,不过不懂交互的前端一定不是好前端。

    2、后端。
    应该说前段工程师必须至少了解一门后端语言,不过如果爱好也可深入学习,入手难度比较低的应该是PHP了。这部分由可分为基于页面,基于框架两种。
    大型项目都是基于框架开发的,建议至少了解一个MVC框架,比如PHP的Ci、Yii、Yaf
    等,好还框架的设计思想都大同小异。如今NodeJs在大公司已经得到普遍的使用,推荐大家使用在Node上使用Express框架做一些后端服务的开
    发。
    3、Android和IOS开发。
    时至今日,前端的工作领域已经非常广泛,native的界面开发本质上也是前端开发,个大公司都面临着Native环境和web环境页面同时维护的问题,如果能够在技术上得到统一,将会有巨大的价值。对于学有余力的同学,应该了解Native开发的基本流程,至少了解到界面构建的技术。




    展开全文
  • 一、Android学习路线

    2018-03-05 10:48:20
    Android学习路线,资料来源:网络+自己工作经理。 资料来源于网络,总结形成文档工具XMind,共七阶段。(符合作者从工作至今的步伐,第一次写文章啥的。) 第一阶段:Java面向对象编程;第二阶段:JavaWeb开发;第...

           Android学习路线,资料来源:网络+自己工作经理。

           资料来源于网络,总结形成文档工具XMind,共七阶段。(符合作者从工作至今的步伐,第一次写文章啥的。)

           第一阶段:Java面向对象编程;第二阶段:JavaWeb开发;第三阶段:AndroidUI编程;第四阶段:Android网络编程与数据存储;第五阶段:Android手机硬件管理;第六阶段:Android图形编程技术;第七阶段:Android游戏开发。

           图片上传总是失败。然后弄了一个下载连接http://download.csdn.net/download/zebrax/10269391,突然间发现现在上传资源的时候需要配置积分,如果不缺的积分的直接下载。我再试试可不可以插入图片 =  =。

           仍旧是不可以啊。有需要的请把邮箱留下。

    展开全文
  • Android学习路线总结

    2018-11-27 08:45:03
    一、学习知识汇总 1、Java se基础 1).Java基本数据类型与表达式,分支循环。 2).String和StringBuffer的使用、正则表达式。 3).面向对象的抽象,封装,继承,多态,类与对象,对象初始化和回收;构造函数、this...
  • Java后台学习路线

    2019-06-08 09:41:37
    2018.11.10更新,请看文章末尾惊喜或者点击 https://blog.csdn.net/qq_40374604/article/details/83932163 本文摘自---... ①一段摘自知乎的文档 Java就业方向目前主要方向为...
  • 作者:姚冬链接:http://www.zhihu.com/question/31156766/answer/54645514来源:知乎 我们先假设某人在音视频方面是零基础,也没学过任何数字信号处理相关知识,数学基础基本是高中水准,但是熟悉 C/C++ 开发,...
  • Android学习路线

    2018-03-20 13:57:59
    转载至:http://www.cnblogs.com/zhuawang/p/3672228.html第一阶段:Java面向对象编程1.Java基本数据类型与表达式,分支循环。 2.String和StringBuffer的使用、正则表达式。 3.面向对象的抽象,封装,继承,多态,...
  • 参考: Android 源码系列之从源码的角度深入理解LayoutInflater.Factory之主题切换(上)
  • 推荐JAVA学习路线

    2018-12-24 19:48:57
    一直以来,都想写一篇介绍JAVA学习路线的博客。为什么有这个想法?原因有两个,其一:笔者从大三开始学习JAVA,至今也3年了。由于身边缺乏老司机带路,只能自己一步步探索,深知没人指路的痛苦。所以看过很多垃圾的...
  • android逆向学习路线

    2019-07-19 15:29:24
    学习路线: 8周 Android基础知识 学习Android开发编程,了解其原理。 熟悉Java,C和C++三种在Android系统中使用较多的语言,了解几种语言的特性。 学习Android开发,推荐使用Android studio进行开发,也可以使用...
  • 嵌入式前辈学习路线

    2019-03-01 00:06:04
    嵌入式大神:教你如何从零开始学习路线解析   嵌入式开发就是指在嵌入式操作系统下进行开发,一般常用的系统有WinCE,ucos,vxworks,linux,android等。另外,用c,c++或汇编开发;用高级处理器,arm7,...
  • 最近一位转型AI的朋友抱怨,“走过的最远的路,就是机器学习过程中的弯路”,然后开始各种blablabla,从论文的坑,到模型的坑,再到培训的坑...一路吐槽。尤其是论文,他骂道:“最讨厌的就是那种,高高在上、假装...
  • 学习指导建议,路线规划等Android学习之路—stormzhang(估计学安卓的大部分都知道他吧,就是这么有魅力,是个榜样!) 如何自学Android编程?—来自知乎(算是最热的贴吧,很多牛人过来人的建议和经验,必须看!)...
  • Android技能图谱

    2017-01-06 09:18:51
    本文转载自:https://github.com/TeamStuQ/skill-map/blob/master/data/map-MobileDev-AndroidDev.md 记录下来,一条条搞定 操作系统 Windows/MacOSX/Linux 编程语言 JavaHTML/JS (Hybrid/Web ...
  • 音视频开发学习路线

    2019-03-11 10:35:46
    音视频开发学习——转知乎答案 著作权归作者所有。 商业转载请联系作者获得授权,非商业转载请注明出处。 作者:姚冬 链接:http://www.zhihu.com/question/31156766/answer/54645514 来源:知乎 我们先假设某人...
  • 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。—————————————————————我是分割线————————————————————有人回答说这只能是大企业或者...
  • 营长的一位转型AI的朋友,最近对营长抱怨,“走过的最远的路,就是机器学习过程中的弯路”,然后开始各种blablabla,从论文的坑,到模型的坑,再到培训的坑...一路吐槽。尤其是论文,他骂道:“最讨厌的就是那种,...
  • 营长的一位转型AI的朋友,最近对营长抱怨,“走过的最远的路,就是机器学习过程中的弯路”,然后开始各种blablabla,从论文的坑,到模型的坑,再到培训的坑...一路吐槽。尤其是论文,他骂道:“最讨厌的就是那种,...
1 2 3 4 5 ... 20
收藏数 1,101
精华内容 440