先简单的分两种情况:
一、 有编程基础,或者科班出身的,直接上吧。 强烈推荐郭霖老师的《第一行代码-Android》
二、没编程基础的,先入门java,如果天天都有比较多的空闲时间的话,这个入门时间要在2周完成,如果没有的话,1个月内完成吧, 不要让拖延耽搁你的激情。
如果你准备好了进军Android:
不管你什么时候开始学习Android, 请使用Android Studio,首现改主题,然后去网上搜一下常用的 20个快捷键截图放在电脑桌面上!
如果是 色彩盲,请自行收藏这个网站: Material Design Color Palette Generator
所有书上的UI部分扫一遍就行了,我相信现在还没有书按material design标准讲解。
从一开始起就严格按照material design写, Material Design我想你一开始学习的时候身边是没设计师的吧,但是按照标准,你不需要设计师:)
不要自定义一堆padding margin,但你需要边框,边距的时候,请看看 ?android:attr/里面有木有你需求的(由于android studio强大的补全功能,你一般只需打几个关键词就有提示了),比如你需要给一个ImageButton加点击效果, 不要傻不拉几的去写一个selector了,你只需要输入 item select这些关键词,自动补全就会给你提示了。
不要定义一大堆乱七八糟的 字体大小了,materail design上的几种基本字体大小可以满足你!
再也 不要使用ListView了,改成RecycleView吧!
再也 不要寻找第三方下拉刷新控件了,SwipeRefreshLayout肯定符合你的要求(不信你看,知乎Android客户端都是用的这个(●ˇ∀ˇ●))。
再也 不要使用第三方侧滑栏了,DrawerLayout能满足你!
再也 不要使用ViewPagerTabStripe这一类的第三方Tab控件了,请使用TabLayout!
再也 不用找圆形头像控件,圆角控件了,其他的Univeral Image Loader /Picasso也不用看了,直接上Fresco | Fresco 中文说明吧,它都有!不如用省下的时间看看Fresco的源码。
少去国内论坛瞎晃,然后各种求指点,安心写两个月,你会发现自己水平比他们都强, 有问题请去stackOverflow搜索, 国内博文除了几个大牛的都少看,都是假的!都是骗人的!很多写着是原创,但是博文内容他们自己都没试验过,鄙视这些不负责任的!
少听一些人说的有问题要写博客记下来!把这个时间省下,学一下 UML图怎么画,给自己的 工程加一些规范的注释吧!你的这些规范的源码和规范的注释就是你以后的资料库和经验库!
请学会使用Git,自己一个人也要用,我们先不说那些团队合作什么的高大上的,就说你这一版代码修残了,要从原来的重新修改,怎么办?用Git,回滚版本!就说你突然一天电脑出问题了,或者你范二了,没备份就重装系统了,想哭怎么办?用Git,再也不用担心代码突然丢啦!
---------------------------------2015/8/13-------------------------------------------------------
评论里面有些同学有疑问关于如何学习material design控件,我的建议是 去GitHub搜,有很多同行给的例子,比如 chenyangcun/MaterialDesignExample · GitHub
这些栗子足够入门。
-------------------------------------------------------------------------------------------------------
---------------------------------2015/8/8----------------------------------------------------------
有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现 NDK并不是神秘的东西,你跟着官方的步骤走一遍就知道什么回事了, 无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。
一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。
------------------------------------------------------------------------------------------------------------
说说我的情况吧,第一个学过的语言是C,然后C学的很烂的情况下继续学习了C++,为什么没有先把C学好再学C++呢,因为课程设计==,我有自知之明,所以在上C++的前一个寒假就先开始看了,然后先看了一本《易学c++》,虽然那本书在现在浅显至极,但当时还是感觉有点略难,我通过这本书熟练地掌握了std::iostream!==然后基本的对象模型有了一点概念,我比较好高骛远,于是就在此时想直接通过最后一个大作业——命令行下的RPG游戏 彻底掌握C++这门最难的语言!对,你没听错,我当时想的就是这个大作业要是搞懂了,C++还不是被我各种SM,但很不幸,虽然我一行行的把这个大作业的源码比着答案敲了一遍,但还是不懂,于是就在网上找了一个据说是清华的java课件开始学习,你还别说,除了当时感觉java里面把function叫做method(方法)感觉怪怪的以外,真的在不到3天的时间完全弄懂了对象的概念以及对象的继承,然后差不多就开学了==(当年不懂事,整个寒假就看了这10多天的书),所以java大法好。
好,这是我人生入坑的开始,我说的寒假就是2014年寒假!,在接下来的学校的C++课程中我当然如鱼得水,然后一发不可收拾,很快我就自己把那本98清华版的《visual c++程序设计》弄烂了,确实那本书的只是我掌握的滚瓜烂熟,然后我就深入了解MFC,什么用GDI实现AlphaBlend,MFC的设计思想,MFC中数据库的使用什么的,然而现在回首看来这些并没有什么卵用。然后我就天天晚上回到宿舍打开电脑写代码,但显然我很快从社区(知乎==)上得知MFC很烂,大家都说微软大法好!于是入了C#的坑,然后发现生活好美好===天天真是喜欢C#的不得了,不过有一天我成了软黑,winform绘图闪成狗,loadlibrary看着好蛋疼,以及用user32.dll时,蛋疼的语法,蛋疼的函数名字,API参数,然后我得知,原来罪魁祸首不是c#,是winAPI就长这样!
然后就在知乎大声地教唆下,入了Qt教,入门是看的一个外国人录得视频,英文无字幕,但是他的声音好好听,于是就学了Qt,第一次发现各种Layout的自适应布局,通过掌握QGraphicsView熟悉了MVC模型,后来还用QGraphicsView到了真实的项目,发现===好多坑==,坐标系统是坑,事件系统是坑,总之,欲仙欲死,不过说实话,我至今还是认为Qt的设计挺好的,QML想学,但流产了,原因大概是没时间吧。
然后解除了另外两端惨绝人寰的事情,第一个是第一次做音视频的实时网络传输的时候,资料很少,一开始甚至连Ffmpeg都不知道,后来知道了,就入了Ffmpeg的坑,好多莫名奇妙的错误,都需要右键去看源码,然后音视频的编解码以及Rtp/Rtsp协议弄的差不多,demo也出来的时候,为了广域网,又要入P2P Nat穿透的坑,但是很遗憾,没有完全成功。
还有一些其他乱七八槽的事情回来补==今天先说重点。
在今年4月份左右,我第一次下定决心要搞定Android,而且我真的做到了!虽然以前断断续续看过android,但都没屁用,这次是真的白天看书,晚上写代码。郭霖老师的《第一行代码——android》只看了5章,但在这五章的学习过程中,我真的入了Android的门了,然后那本书我再也没有打开过,当然,Android只会画界面是远远不够的,现在的support.design.widget组件集让Android界面开发变得很轻松了,重要的是和服务器的交互,以及嵌入式本地数字信号处理,一不小心写了这么多,第一次发现自己打字这么快,哈哈~
一、 有编程基础,或者科班出身的,直接上吧。 强烈推荐郭霖老师的《第一行代码-Android》
二、没编程基础的,先入门java,如果天天都有比较多的空闲时间的话,这个入门时间要在2周完成,如果没有的话,1个月内完成吧, 不要让拖延耽搁你的激情。
如果你准备好了进军Android:
不管你什么时候开始学习Android, 请使用Android Studio,首现改主题,然后去网上搜一下常用的 20个快捷键截图放在电脑桌面上!
如果是 色彩盲,请自行收藏这个网站: Material Design Color Palette Generator
所有书上的UI部分扫一遍就行了,我相信现在还没有书按material design标准讲解。
从一开始起就严格按照material design写, Material Design我想你一开始学习的时候身边是没设计师的吧,但是按照标准,你不需要设计师:)
不要自定义一堆padding margin,但你需要边框,边距的时候,请看看 ?android:attr/里面有木有你需求的(由于android studio强大的补全功能,你一般只需打几个关键词就有提示了),比如你需要给一个ImageButton加点击效果, 不要傻不拉几的去写一个selector了,你只需要输入 item select这些关键词,自动补全就会给你提示了。
不要定义一大堆乱七八糟的 字体大小了,materail design上的几种基本字体大小可以满足你!
再也 不要使用ListView了,改成RecycleView吧!
再也 不要寻找第三方下拉刷新控件了,SwipeRefreshLayout肯定符合你的要求(不信你看,知乎Android客户端都是用的这个(●ˇ∀ˇ●))。
再也 不要使用第三方侧滑栏了,DrawerLayout能满足你!
再也 不要使用ViewPagerTabStripe这一类的第三方Tab控件了,请使用TabLayout!
再也 不用找圆形头像控件,圆角控件了,其他的Univeral Image Loader /Picasso也不用看了,直接上Fresco | Fresco 中文说明吧,它都有!不如用省下的时间看看Fresco的源码。
少去国内论坛瞎晃,然后各种求指点,安心写两个月,你会发现自己水平比他们都强, 有问题请去stackOverflow搜索, 国内博文除了几个大牛的都少看,都是假的!都是骗人的!很多写着是原创,但是博文内容他们自己都没试验过,鄙视这些不负责任的!
少听一些人说的有问题要写博客记下来!把这个时间省下,学一下 UML图怎么画,给自己的 工程加一些规范的注释吧!你的这些规范的源码和规范的注释就是你以后的资料库和经验库!
请学会使用Git,自己一个人也要用,我们先不说那些团队合作什么的高大上的,就说你这一版代码修残了,要从原来的重新修改,怎么办?用Git,回滚版本!就说你突然一天电脑出问题了,或者你范二了,没备份就重装系统了,想哭怎么办?用Git,再也不用担心代码突然丢啦!
---------------------------------2015/8/13-------------------------------------------------------
评论里面有些同学有疑问关于如何学习material design控件,我的建议是 去GitHub搜,有很多同行给的例子,比如 chenyangcun/MaterialDesignExample · GitHub
这些栗子足够入门。
-------------------------------------------------------------------------------------------------------
---------------------------------2015/8/8----------------------------------------------------------
有朋友说要是动真格的话,需要NDK以及JVM等的知识,首现 NDK并不是神秘的东西,你跟着官方的步骤走一遍就知道什么回事了, 无非就是一些代码格式以及原生/JAVA内存交互,进阶一点的有原生/JAVA线程交互,线程交互确实有点蛋疼,但平常避免用就好了,再说对于初学者来说关心NDK干嘛,据鄙人以前的经历,只在音视频通信和一个嵌入式信号处理(离线)的两个项目中用过,嵌入式信号处理是JAVA->NDK->.SO->MATLAB这样调用的我原来MATLAB的代码,其他的大多就用在游戏上了吧,一般的互联网公司会有人给你公司的SO包的。
至于JVM,该掌握的那部分,相信我,你会掌握的,不该你掌握的,有那些专门研究JVM的人来做,不如省省心有空看看计算机系统,编译原理。
一句话,平常多写多练,这是最基本的程序员的素质,尽量挤时间,读理论基础书籍,JVM不是未来30年唯一的虚拟机,JAVA也不一定再风靡未来30年工业界,其他的系统和语言也会雨后春笋冒出来,但你理论扎实会让你很快理解学会一个语言或者框架,你平常写的多会让你很快熟练的将新学的东西应用到实际中。
初学者,一句话,多练。
------------------------------------------------------------------------------------------------------------
说说我的情况吧,第一个学过的语言是C,然后C学的很烂的情况下继续学习了C++,为什么没有先把C学好再学C++呢,因为课程设计==,我有自知之明,所以在上C++的前一个寒假就先开始看了,然后先看了一本《易学c++》,虽然那本书在现在浅显至极,但当时还是感觉有点略难,我通过这本书熟练地掌握了std::iostream!==然后基本的对象模型有了一点概念,我比较好高骛远,于是就在此时想直接通过最后一个大作业——命令行下的RPG游戏 彻底掌握C++这门最难的语言!对,你没听错,我当时想的就是这个大作业要是搞懂了,C++还不是被我各种SM,但很不幸,虽然我一行行的把这个大作业的源码比着答案敲了一遍,但还是不懂,于是就在网上找了一个据说是清华的java课件开始学习,你还别说,除了当时感觉java里面把function叫做method(方法)感觉怪怪的以外,真的在不到3天的时间完全弄懂了对象的概念以及对象的继承,然后差不多就开学了==(当年不懂事,整个寒假就看了这10多天的书),所以java大法好。
好,这是我人生入坑的开始,我说的寒假就是2014年寒假!,在接下来的学校的C++课程中我当然如鱼得水,然后一发不可收拾,很快我就自己把那本98清华版的《visual c++程序设计》弄烂了,确实那本书的只是我掌握的滚瓜烂熟,然后我就深入了解MFC,什么用GDI实现AlphaBlend,MFC的设计思想,MFC中数据库的使用什么的,然而现在回首看来这些并没有什么卵用。然后我就天天晚上回到宿舍打开电脑写代码,但显然我很快从社区(知乎==)上得知MFC很烂,大家都说微软大法好!于是入了C#的坑,然后发现生活好美好===天天真是喜欢C#的不得了,不过有一天我成了软黑,winform绘图闪成狗,loadlibrary看着好蛋疼,以及用user32.dll时,蛋疼的语法,蛋疼的函数名字,API参数,然后我得知,原来罪魁祸首不是c#,是winAPI就长这样!
然后就在知乎大声地教唆下,入了Qt教,入门是看的一个外国人录得视频,英文无字幕,但是他的声音好好听,于是就学了Qt,第一次发现各种Layout的自适应布局,通过掌握QGraphicsView熟悉了MVC模型,后来还用QGraphicsView到了真实的项目,发现===好多坑==,坐标系统是坑,事件系统是坑,总之,欲仙欲死,不过说实话,我至今还是认为Qt的设计挺好的,QML想学,但流产了,原因大概是没时间吧。
然后解除了另外两端惨绝人寰的事情,第一个是第一次做音视频的实时网络传输的时候,资料很少,一开始甚至连Ffmpeg都不知道,后来知道了,就入了Ffmpeg的坑,好多莫名奇妙的错误,都需要右键去看源码,然后音视频的编解码以及Rtp/Rtsp协议弄的差不多,demo也出来的时候,为了广域网,又要入P2P Nat穿透的坑,但是很遗憾,没有完全成功。
还有一些其他乱七八槽的事情回来补==今天先说重点。
在今年4月份左右,我第一次下定决心要搞定Android,而且我真的做到了!虽然以前断断续续看过android,但都没屁用,这次是真的白天看书,晚上写代码。郭霖老师的《第一行代码——android》只看了5章,但在这五章的学习过程中,我真的入了Android的门了,然后那本书我再也没有打开过,当然,Android只会画界面是远远不够的,现在的support.design.widget组件集让Android界面开发变得很轻松了,重要的是和服务器的交互,以及嵌入式本地数字信号处理,一不小心写了这么多,第一次发现自己打字这么快,哈哈~
安卓对JAVA的需求,我认为远远没有那么高,我觉得能系统的理解JAVA基础就完全可以开始学习JAVA基础。
再能开始写出简单的安卓程序时候就可以转战安卓了,但是注意两个字:系统化,这样对你个人的水平很有提高。
随便举个例子,列举你需要的知识点:
0.学会使用开发工具:eclipse
1.基础语法:数据类型、方法的基本运用、运算符、数组、循环、分支的使用。
2.常用算法:排序(冒泡排序、选择排序、快排(面试常用)),正则表达式(会用、理解即可)
3.设计模式:常用单例模式,工厂模式、监听模式等等~单例必须会。后期设计模式建议仔细看看, 可以提高水平。
4.面向对象:封装,继承,多态,类和对象的概念。
5.常用类:String(Stringbuffer stringbuild string的区别,面试常用),MATH(random等随机数和String和int和double之间的转换常用。)Data和Calender类。常用类太多,当你学到这里你应该已经学会查询API了,如果不会查询API,那就学会查询,再进行下一步的学习。
6.内部类:静态内部类,成员内部类,匿名内部类,很重要,很常用,理解为什么需要内部类和如何使用内部类。
http://7.IO流:理解IO流的概念,和各种流的转换以及区别。此时你应该学会如何将一个图片从一个文件读取到另一个文件里面。如果不会这个,那就重复学习这个。
8.集合:list和set以及map的用法,以及他们互相之间的区别必须全部掌握。学了集合之后,数组很少会去使用了。
9.异常处理:理解异常的概念,以及常用异常,和处理方法。
10.反射:理解反射和应用。
11.网络编程,学会网络链接,聚合数据(随意百度一下)有很多免费的接口可以使用,进行练手。学会json解析。
11.GUI:选学,目前已经遗弃。
至于什么是系统呢?
简单的举例下:
下面这个是我当年学完JAVA之后,做的思维导图,你再不大量查阅资料的前提下,能做出下面这个导图就能去学安卓了。(后面有彩蛋,不要走。)
关于学习方法,有人喜欢看书,有人喜欢看视频,各有优缺点,
如果你喜欢看视频资料的话。
我准备了大量成套的学习资源,注意是成套,别的地方不好收集。
有安卓,ios,html,java,Python等等~
咳咳,拿走的记得送我个赞,谢了。
我收集了600多G各种各样的视频。
扫描下方二维码,回复“自学视频”可以获取资料,注意关键字的回复!
也可以搜索微信公众号“quanneishi” 回复“自学视频”可以获取资料,注意关键字的回复!
可以拿到我准备的600G自学视频,安卓,ios,c语言,java,html,python,都有。
再能开始写出简单的安卓程序时候就可以转战安卓了,但是注意两个字:系统化,这样对你个人的水平很有提高。
随便举个例子,列举你需要的知识点:
0.学会使用开发工具:eclipse
1.基础语法:数据类型、方法的基本运用、运算符、数组、循环、分支的使用。
2.常用算法:排序(冒泡排序、选择排序、快排(面试常用)),正则表达式(会用、理解即可)
3.设计模式:常用单例模式,工厂模式、监听模式等等~单例必须会。后期设计模式建议仔细看看, 可以提高水平。
4.面向对象:封装,继承,多态,类和对象的概念。
5.常用类:String(Stringbuffer stringbuild string的区别,面试常用),MATH(random等随机数和String和int和double之间的转换常用。)Data和Calender类。常用类太多,当你学到这里你应该已经学会查询API了,如果不会查询API,那就学会查询,再进行下一步的学习。
6.内部类:静态内部类,成员内部类,匿名内部类,很重要,很常用,理解为什么需要内部类和如何使用内部类。
http://7.IO流:理解IO流的概念,和各种流的转换以及区别。此时你应该学会如何将一个图片从一个文件读取到另一个文件里面。如果不会这个,那就重复学习这个。
8.集合:list和set以及map的用法,以及他们互相之间的区别必须全部掌握。学了集合之后,数组很少会去使用了。
9.异常处理:理解异常的概念,以及常用异常,和处理方法。
10.反射:理解反射和应用。
11.网络编程,学会网络链接,聚合数据(随意百度一下)有很多免费的接口可以使用,进行练手。学会json解析。
11.GUI:选学,目前已经遗弃。
至于什么是系统呢?
简单的举例下:
下面这个是我当年学完JAVA之后,做的思维导图,你再不大量查阅资料的前提下,能做出下面这个导图就能去学安卓了。(后面有彩蛋,不要走。)
![](https://i-blog.csdnimg.cn/blog_migrate/3a89dfb2e1916357892c9ce8983ab758.png)
关于学习方法,有人喜欢看书,有人喜欢看视频,各有优缺点,
如果你喜欢看视频资料的话。
我准备了大量成套的学习资源,注意是成套,别的地方不好收集。
有安卓,ios,html,java,Python等等~
咳咳,拿走的记得送我个赞,谢了。
我收集了600多G各种各样的视频。
![](https://i-blog.csdnimg.cn/blog_migrate/63581a30836fc2a2d066c14a797195d7.png)
扫描下方二维码,回复“自学视频”可以获取资料,注意关键字的回复!
也可以搜索微信公众号“quanneishi” 回复“自学视频”可以获取资料,注意关键字的回复!
可以拿到我准备的600G自学视频,安卓,ios,c语言,java,html,python,都有。
![](https://i-blog.csdnimg.cn/blog_migrate/5cf588acb2ed2f9b73ec59707bcafb99.jpeg)
来歪个楼。看到上面有不少人推荐《第一行代码》这本书的。
首先申明,没有看过那本书,但是之前看过郭霖的博客。
他的博客确实比大多数人写得更用心,有一些实用的东西,可能初学者觉得很炫,但是只是看看就可以,里面的一些思维并不值得借鉴。如果写代码时这么做,代码review时肯定要被老员工喷死。
比如这个 Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
除了里面的一些小问题和效果差强人意之外,有一个最大的问题就是没有做好封装。这就不是技术的问题,而是思维的问题了。
这时你再对比一下github上一些star和fork都很多的project,就会很明显地感觉到其中的差距。
与其去学那些花哨的东西,不如静下心来自己写个缓存框架,认真看些Android源码。ImageLoader再好,也不可能永远都满足你的要求。如果缓存框架和网络交互框架写好了,基本上60%的工作都完成了,剩下30%是自定义View,剩下那10%就是很多博客中经常乐此不疲去写的,然而并没什么卵用。
再说了,有 Android Developers和StackOverflow这两个好东西,哪里还需要什么其他多余的书。说句不客气的话,99%的国内博客和书籍都是其中的片面甚至是蹩脚的翻译,比原汁原味的东西差得不是一星半点。
更何况做Demo的水平和实际的项目之间,还差着无数个Debug的过程。
首先申明,没有看过那本书,但是之前看过郭霖的博客。
他的博客确实比大多数人写得更用心,有一些实用的东西,可能初学者觉得很炫,但是只是看看就可以,里面的一些思维并不值得借鉴。如果写代码时这么做,代码review时肯定要被老员工喷死。
比如这个 Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能
除了里面的一些小问题和效果差强人意之外,有一个最大的问题就是没有做好封装。这就不是技术的问题,而是思维的问题了。
这时你再对比一下github上一些star和fork都很多的project,就会很明显地感觉到其中的差距。
与其去学那些花哨的东西,不如静下心来自己写个缓存框架,认真看些Android源码。ImageLoader再好,也不可能永远都满足你的要求。如果缓存框架和网络交互框架写好了,基本上60%的工作都完成了,剩下30%是自定义View,剩下那10%就是很多博客中经常乐此不疲去写的,然而并没什么卵用。
再说了,有 Android Developers和StackOverflow这两个好东西,哪里还需要什么其他多余的书。说句不客气的话,99%的国内博客和书籍都是其中的片面甚至是蹩脚的翻译,比原汁原味的东西差得不是一星半点。
更何况做Demo的水平和实际的项目之间,还差着无数个Debug的过程。
没这么复杂,只要将J2se基础学扎实就够,学安卓会变得轻松许多。 J2se基础扎实才是最重要的,J2se基础扎实才是最重要的,J2se基础扎实才是最重要的。重要的话说三遍。只要你J2se基础扎实,无论是学Android还是J2ee都会变得好上手。都不会再有很多代码看着迷迷糊糊的感觉。
至于主要要学哪些内容,基本就是:数据类型、数组、流程控制语句(if、switch、for、while这些东西)、java面向对象的知识(封装、多态、继承,面向对象思想很重要,但其实你写多了代码,思想就来了)、java常用的类、集合、io流、线程、异常、部分网络编程知识可以选择性学习,因为写安卓你肯定会遇到,迟早要学。
最后补充一点,代码写少了,说什么都是放屁。所以呢?想要提升就给自己定日程,每天至少有效率的写两个小时代码。
至于主要要学哪些内容,基本就是:数据类型、数组、流程控制语句(if、switch、for、while这些东西)、java面向对象的知识(封装、多态、继承,面向对象思想很重要,但其实你写多了代码,思想就来了)、java常用的类、集合、io流、线程、异常、部分网络编程知识可以选择性学习,因为写安卓你肯定会遇到,迟早要学。
最后补充一点,代码写少了,说什么都是放屁。所以呢?想要提升就给自己定日程,每天至少有效率的写两个小时代码。
看了问题之后,第一反应是:为什么要学了Java到一定程度再去转战Android?
如果原本Java基础不是很深或者没有太多相关经验,那就直接为了做Android而去学Java好了。
我一直觉得单纯学一个计算机语言是很无聊也很难坚持下来的,因为讲语言的书老是弄一些让人毫无成就感的无聊作业作为练习。Java更是如此,由于应用面比较广,可能你看的书还在教你怎么写Servlet之类的东西呢。虽然那些东西也挺有用的,但是你是想做Android,绝对是想看到自己写出来的哪怕是简陋的画面在手机上动起来,而不是一堆代码在服务器端默默地工作。
既然你想做Android,那就直接去看做Android的材料,试着努力做一个简单的APP出来, 在此期间搞懂Java和Android的各种知识。 过程中遇到Java不懂的,再回去查Java的基础知识会比较有动力,也比较有成就感。
无法带来成就感的学习,往往很难坚持下来。
== 回应部分评论的分割线 ==
评论中有很多人提出了非常中肯的意见,说Java基础知识很重要,如果不学好基础知识,要么变成市场上那些垃圾开发人员,要么自己会走很多弯路。
对于这样的意见,我4096%的同意!基础知识不学好,越往后走越难,最后就会进入一个瓶颈,只能做最简单层面的东西,稍微涉及一点高级功能和原理的地方,要么是通过大量毫无根据的尝试偶然碰运气解决,要么是根本无法解决。碰运气解决的,解决方案通常也都是低效、质量不稳定的。
我之所以在这里还是说要从实用APP入手,只是说如果一点都不结合实践,单纯学习Java语言的理论,会很难让自己保持入门的动力。说实话,先实践入手的学习方法,其实不如从基础入手,把知识学扎实了再学习APP实践效率高。就像 @佚名者 说的,会走很多弯路。但是,重要的是这样虽然花的时间稍长,作为学习者却更容易坚持下来。
这就好像程序的进度条,一个程序,在进行某个无法并行进行的循环处理时,单线程不给任何反馈其实效率最高,做成多线程,同步显示进度条一定比没有进度条的程序执行效率低,因为一方面要进程间同步,一方面还要做UI处理。然而,作为用户,绝对是有进度条的让人感觉不那么难以忍受。所以,虽然从实践入手稍微效率低些,但更容易进行下去。
我也在上面对原有答案的部分内容加了粗体。在结合实践的学习过程中,千万不能囫囵吞枣,照着教程把程序复制过来跑起来就蹦蹦跳跳地去找小伙伴炫耀了。一定要注意学懂背后的原理,不然真的是浪费自己的青春。
最后,记得以前参加一个培训,说不同的人会习惯不同的学习方式。有的人就是喜欢从实践入手,然后慢慢掌握理论知识,还有的人就是愿意啃理论知识,然后理论学全了才去实践。两种没有好坏之分,只是天生更适合某一种方式(弗洛伊德说:或者跟童年经历有关)。
我现在回答的这种,刚巧比较适合前一种人。如果你是后一种人,请认真学习Java理论知识,学到什么程度的话,至少要把基本的面向对象概念,包括内嵌类、匿名类等稍微另类些的东西掌握,然后listener的机制,当然,作为Java的基础中的基础的引用、垃圾回收什么的就更得烂熟于胸了,其它例如并行、java.util里面的常用内容也是必须的……然后,去看看Android开发,觉得入门有难度,回去继续学,觉得还好,就进Android的门玩玩。
其实,还有个折中的办法。
先把Java基础知识相关的书快速浏览一遍。目的不是为了学会学懂,而是知道Java基础知识都包含了什么东西,相当于在脑子里存一份Java基础知识的目录,详细内容不明。然后去学Android入门,当你遇到讲的知识里自己不懂,刚巧在Java基础知识目录里存在时,就回去把那条目录对应的内容学懂。
如果原本Java基础不是很深或者没有太多相关经验,那就直接为了做Android而去学Java好了。
我一直觉得单纯学一个计算机语言是很无聊也很难坚持下来的,因为讲语言的书老是弄一些让人毫无成就感的无聊作业作为练习。Java更是如此,由于应用面比较广,可能你看的书还在教你怎么写Servlet之类的东西呢。虽然那些东西也挺有用的,但是你是想做Android,绝对是想看到自己写出来的哪怕是简陋的画面在手机上动起来,而不是一堆代码在服务器端默默地工作。
既然你想做Android,那就直接去看做Android的材料,试着努力做一个简单的APP出来, 在此期间搞懂Java和Android的各种知识。 过程中遇到Java不懂的,再回去查Java的基础知识会比较有动力,也比较有成就感。
无法带来成就感的学习,往往很难坚持下来。
== 回应部分评论的分割线 ==
评论中有很多人提出了非常中肯的意见,说Java基础知识很重要,如果不学好基础知识,要么变成市场上那些垃圾开发人员,要么自己会走很多弯路。
对于这样的意见,我4096%的同意!基础知识不学好,越往后走越难,最后就会进入一个瓶颈,只能做最简单层面的东西,稍微涉及一点高级功能和原理的地方,要么是通过大量毫无根据的尝试偶然碰运气解决,要么是根本无法解决。碰运气解决的,解决方案通常也都是低效、质量不稳定的。
我之所以在这里还是说要从实用APP入手,只是说如果一点都不结合实践,单纯学习Java语言的理论,会很难让自己保持入门的动力。说实话,先实践入手的学习方法,其实不如从基础入手,把知识学扎实了再学习APP实践效率高。就像 @佚名者 说的,会走很多弯路。但是,重要的是这样虽然花的时间稍长,作为学习者却更容易坚持下来。
这就好像程序的进度条,一个程序,在进行某个无法并行进行的循环处理时,单线程不给任何反馈其实效率最高,做成多线程,同步显示进度条一定比没有进度条的程序执行效率低,因为一方面要进程间同步,一方面还要做UI处理。然而,作为用户,绝对是有进度条的让人感觉不那么难以忍受。所以,虽然从实践入手稍微效率低些,但更容易进行下去。
我也在上面对原有答案的部分内容加了粗体。在结合实践的学习过程中,千万不能囫囵吞枣,照着教程把程序复制过来跑起来就蹦蹦跳跳地去找小伙伴炫耀了。一定要注意学懂背后的原理,不然真的是浪费自己的青春。
最后,记得以前参加一个培训,说不同的人会习惯不同的学习方式。有的人就是喜欢从实践入手,然后慢慢掌握理论知识,还有的人就是愿意啃理论知识,然后理论学全了才去实践。两种没有好坏之分,只是天生更适合某一种方式(弗洛伊德说:或者跟童年经历有关)。
我现在回答的这种,刚巧比较适合前一种人。如果你是后一种人,请认真学习Java理论知识,学到什么程度的话,至少要把基本的面向对象概念,包括内嵌类、匿名类等稍微另类些的东西掌握,然后listener的机制,当然,作为Java的基础中的基础的引用、垃圾回收什么的就更得烂熟于胸了,其它例如并行、java.util里面的常用内容也是必须的……然后,去看看Android开发,觉得入门有难度,回去继续学,觉得还好,就进Android的门玩玩。
其实,还有个折中的办法。
先把Java基础知识相关的书快速浏览一遍。目的不是为了学会学懂,而是知道Java基础知识都包含了什么东西,相当于在脑子里存一份Java基础知识的目录,详细内容不明。然后去学Android入门,当你遇到讲的知识里自己不懂,刚巧在Java基础知识目录里存在时,就回去把那条目录对应的内容学懂。
个人认为
1.Java相关知识:
面向对象的概念
理解引用
继承/多态
接口/内部类/匿名内部类/回调(钩子)/观察者模式
异常(声明/捕获)
I/O:类结构/装饰者模式
容器:List/Map/…
多线程:同步/线程池/…
其中主要学会io和内部类即可,然后就可以去学习安卓的内容了。
2.Android的相关内容主要掌握
以上是我认为做安卓的最基础的知识。有了这些知识便可以做出一款完整的app。常用布局/控件的使用/ListView/…
dialog/PopupWindow/Option Menu/Context Menu
fragment
Activity(UIViewController)/broadcastreceiver/service/..
Activity和Service/activity和fragment
intent的各种属性/显式意图/隐式意图
网络通信http:http协议/httpclient/volley/.../json/xml解析
耗时任务:Thread/asynctask/handler
动画:Tween Animation(iOS核心动画:假象)/DrawableAnimation/Property Animation(3.0,UIView)
各种资源文件:字符串/数组/图片/.../style/attr/selector
3.会使用一些开源项目。github上面有一个安卓开源项目汇总 Trinea/android-open-project · GitHub
4.做一两个项目
关于学习方法:
1.刚开始的时候,可以看视频,这样学起来快一些,刚开始我认为看书是没有用的,通过看视频快速掌握基本东西,可以达到事半功倍的效果。主要参考mars和老罗的视频。
2.这时已经会基本的开发了,接下来可以做一个项目用到平时学习的小的知识点。同样也可以跟着视频学习,网上有一些培训公司的视频,跟着写一个项目就明白软件开发的基本流程了。记住:一定要动手敲代码!
3.这个时候你会发现,做开发基本就是代码拼凑,拿一些现成的开源框架或者以前写过的代码复制粘贴,就是api的调用,已经很容易写一些东西了。就需要从入门阶段进行进阶了,可以将重心放在框架层的源码上面,研究安卓的源代码也是学习安卓的好方式。研究各种manager,Binder,时间分发,view绘制等等,可以做一些自定义的控件,研究开源框架,比如volley等。
4.务实基础,可能在前面的阶段java基础知识还不是很扎实,比如启动一个activity用到xxx.class写代码的时候只是照猫画虎,现在完全可以回头研究到底是什么东西,看java虚拟机等等,3和4也是同步的。
最最重要的就是基础知识,最近在看操作系统,算法这些,非科班出身的一定要重视基础知识。这样才能在这条路上走的更远,更好!
上面说的过程就是我学安卓和踏入it圈子两年以来的经历。最上面列举的java和android的基础知识是有一次和学弟学妹分享做的ppt里面的,希望能帮助到别人。