> 进阶。无论是在Android开发还是其他领域,高级程序员一定是勤奋的,可以快速地掌握大量的新技术、新框架,不仅懂得原理,还能把新的技术落地到公司的产品中去。
◎ 进阶基础:偏重于源码的解析和理解,介绍阅读源码的技巧,以Activity和View为例,管中窥豹地分析其中的基础知识。读者也可依据此类方法,分析其他系统组件的源码。
◎ 高阶控件:介绍若干复杂的控件布局,即AppBarLayout、CoordinatorLayout和ConstraintLayout。通过实例,让读者理解在复杂控件布局中子视图是如何组合和相互关联的。
◎ 项目架构:分析主流架构的设计思想,即Google推荐的MVP和MVVM,还有Facebook的Flux。理解这些架构是如何组织和管理大型项目的,以及它们的优点和缺点各有哪些。
◎ 响应式编程:响应式是一种编程思想,在处理网络请求和功能测试时,基于响应式框架的项目拥有更好的可扩展性和可维护性,响应式编程三剑客即RxJava、Dagger和Retrofit。
◎ 酷炫功能与精美动画:实现两个稍复杂的功能,分别是基于第三方控件和基于系统控件的扩展;并实现两个动画效果,分别用于页面展开和页面切换。对于功能和动画,不同的需求或样式层出不穷,本部分侧重于开发思路的分享。
◎ Kotlin与SVG:Kotlin是用于替代Java的高阶编程语言,SVG是用于替代PNG格式的图像技术,本书着重介绍一些基础概念,提纲挈领,以便于读者后续进行自主学习。
◎ 测试与优化:分享一个主流的自动化测试框架,以及优化内存与电量的一些常见方法。产品的性能与功能同样重要,应用的高品质也会提升产品的用户体验。
-- Android的基础夯实及进阶:
1、Android 的开机流程:init-> zygote-> system_service,这个很重要,学习这个过程,你可以学习到 Android 是一个分层的系统,对 Android的整体架构会有一个很好的了解!
2、Framwork 中的主流服务:ActivityManagerService、PackageManagerService、WindowManagerService、AlarmManagerService、JobSchedulerService、ResourceManagerService、InputManagerService 等等的一些服务,可以结合 Android 的开机流程的每个阶段来看!!
3、IPC 通信机制:Binder,这个很重要,不仅是系统的服务,还是应用自己的服务,都是基于 Binder 机制的
4、进程的创建,startActivity,startService、bindService 等等关于四大组件的启动的问题!!
5、Activity 的启动和切换,不同的模式的区别
> 浅谈Android进阶之路(高级进阶)- http://blog.youkuaiyun.com/xJ032w2j4cCjhOW8s8/article/details/79441532
第一阶段:熟练掌握Java SE,尤其是对其内部类、线程、并发、网络编程等需要深入研究;熟练掌握基于HTTP协议的编程,清楚POST和GET等请求方式流程和细节;能够进行基本的Java Web编程,如果能够使用Java EE则更好;
第二阶段:精通Android的核心API的使用,例如四大组件所涉及的API、Context等,精通核心界面的编程,例如ListView的编程;到达这个阶段已经能够做大部分基本的应用开发了;
第三阶段:精通应用框架的原理,尤其是对IoC的理解及其在Android应用框架中的应用,精通基本的23种设计模式在Android中的应用;
第四阶段:精通JNI,熟练Android类库中C/C++组件开发;并能够使用JNI机制把现有的C/C++组件移植成为应用框架的核心组件;具备修改和编写自己的应用框架的能力;
第五阶段:做出自己的Android系统,无论是底层还是上层都能够了如指掌;能够根据实际需要设计和实现比较大Android系统,例如带领比较大的团队做出自己的Android手机产品等;
第六阶段:势。一切的思考均进入“势”的思考,一切都是思路问题,判断和预测Android的形势,引领市场,通往自由的天堂。
-- 若立志成为Android高手,如有耐心,“一瓶一钵足矣”。
“天下事有难易乎?为之,则难者亦易矣;不为,则易者亦难矣。人之为学有难易乎?学之,则难者亦易矣;不学,则易者亦难矣。”想成为Android高手?这可不是想象中写几行代码那么容易的事情,但也不是不可实现。
如何做?
1.学会懒惰!奇怪吧?但是,你一定也听说过和感受过这个世界某种程度上是由懒人推动的,生命在于懒惰,懒人创造世界。当然,懒惰也是真的傻傻的呆在那里什么都不做,而是说要善于想出做事情的更好的方式,这样就可以节约大量的时间,也就有更多的机会懒惰了,同事也懒出了境界。在Android中如何懒惰?《如何成为Android高手》一文就如何在Android中学会懒惰和朋友们进行了分享。
2.精通Android体系架构、MVC、常见的设计模式、控制反转(IoC):这一点难吗?“学之,则难者亦易矣;不学,则易者亦难矣。”
3.编写可重用、可扩展、可维护、灵活性高的代码:Android应用程序开发的使用纯粹面向对象的Java作为开发语言,自然也就继承了关于Java关于面向对象的优秀想思想,如何做?《如何成为Android高手》一文就如何在Android中编写可重用、可扩展、可维护、灵活性高的代码和朋友们进行了分享。
4.高效的编写高效的代码:高效的编写代码和编写高效的代码好像天生就是死敌。似乎开发速度上去了,程序的执行效率就下去了;程序的执行效率上去,开发速度就下去了。如何解决二者的忙着,请听《如何成为Android高手》一文想大家娓娓道来。
5.学会至少一门服务器端开发技术:没搞错吧,成为Android高手还需要学习服务端开发技术?对,需要!
“蜀之鄙,有二僧:其一贫,其一富。贫者语于富者曰:“吾欲之南海,何如?”富者曰:“子何恃而往?”曰:“吾一瓶一钵足矣。”富者曰:“吾数年来欲买舟而下,犹未能也。子何恃而往!”越明年,贫者自南海还,以告富者,富者有惭色。西蜀之去南海,不知几千里也,僧富者不能至,而贫者至之,人之立志,顾不如蜀鄙之僧哉 ”
若立志成为Android高手,如有耐心,“一瓶一钵足矣”。
-- Android鼓励弱耦合和组件的重用,在Android中MVC的具体体现如下:
1) 视图层(View):一般采用XML文件进行界面的描述,使用的时候可以非常方便的引入,当然,如何你对Android了解的比较的多了话,就一定可以想到在Android中也可以使用JavaScript+HTML等的方式作为View层,当然这里需要进行Java和JavaScript之间的通信,幸运的是,Android提供了它们之间非常方便的通信实现。
2) 控制层(Controller):Android的控制层的重任通常落在了众多的Acitvity的肩上,这句话也就暗含了不要在Acitivity中写代码,要通过Activity交割Model业务逻辑层处理,这样做的另外一个原因是Android中的Acitivity的响应时间是5s,如果耗时的操作放在这里,程序就很容易被回收掉。
3) 模型层(Model):对数据库的操作、对网络等的操作都应该在Model里面处理,当然对业务计算等操作也是必须放在的该层的。
-- 设计模式和IoC(控制反转)
毫无疑问,Android的之所以能够成为一个开放的气象万千的系统,与设计模式的精妙应用是分不开的,只要你稍微用心观察,就会发现在Android中到处都是A设计模式或者设计模式的联合运用,一下的设计模式是您想游刃有余的驾驭Android必须掌握的:
Template Method模式;Factory Method模式;Observer模式;Abstract Factory模式;Adapter模式;Composite模式;
State模式;Proxy模式;Bridge模式;Iterator模式;Mediator模式;Facade模式;Strategy模式;
-- Android框架魅力的源泉在于IoC,在开发Android的过程中你会时刻感受到IoC带来的巨大方便,就拿Activity来说,下面的函数是框架调用自动调用的:
protected void onCreate(Bundle savedInstanceState) ;
不是程序编写者主动去调用,反而是用户写的代码被框架调用,这也就反转了!当然IoC本身的内涵远远不止这些,但是从这个例子中也可以窥视出IoC带来的巨大好处。此类的例子在Android随处可见,例如说数据库的管理类,例如说Android中SAX的Handler的调用等。有时候,您甚至需要自己编写简单的IoC实现,上面展示的多线程现在就是一个说明。
-- Android 开发者,如何在移动开发寒冬中快速提升职场竞争力?- https://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649550322&idx=1&sn=6c56e3b7721e60e1546088a8117e8f22&chksm=f118068fc66f8f991cd2b5aad15dd6e0dd66386c8d88d5f107c10158c5aeb9f53a4055e02f42&scene=21#wechat_redirect
1.如何系统化学习 Android 技术?(Android 知识体系)UI、架构、性能、NDK、其他;代码风格,学习能力,第三方库等;
架构方面的知识主要包括设计思想,及其选择合适架构的能力。 APP 可能会出现卡顿、OOM、ANR 等现象。
2.企业到底需要什么样的 Android 开发人才?(Android 市场行情)
将互联网公司分为两类:
a.没有实体产品的,以软件产品为主的互联网公司(其中相当一部分为外包);A 类公司往往偏向于 UI 及其架构,性能稍次,并且大多数中小型企业会要求应聘者能熟练掌握市场上流行的开源库以节约开发成本。
b.有实体产品,将硬件和软件结合起来的互联网公司。对于 B 类公司,他们因为有实体产品,因此往往会要求应聘者具有某种特殊的技能,例如蓝牙,WIFI等。偏向于性能及 NDK,UI 稍次。在目前的大环境下,这类公司多数都在物联网产业链上,以智能硬件、智能家居、机器人居多,而这类公司的话,大部分其实都是传统企业转型而来,因此其开发的产品比较注重功能的完善及响应速度,UI 的话反而会稍微丑陋一些。毕竟消费者买的是实体产品,配套的 APP 就算再丑也得用。
3.Android 学习的方式都有哪些?(Android 学习方式)
4.对 Android 学习和提升的一些建议。(Android 提升建议)
-- 毕竟不可能每个人刚工作就有三年以上经验。那么如下就是个人的一些小tips:
1.首先要适当修改下我们的简历,可以稍微夸大一些(不是作假简历,只是包装一下项目经验、个人技能等),毕竟竞争对手太多了,项目经验思路可以写清晰简洁一些,突出你的能力,适当出现一些Retrofit、RXJava、ReactNative、Glide等专业术语,否则你会发现根本收不到面试邀请电话。但是如果你过分夸大,那么很有可能你的面试随后感就是以后再也不装逼了。。。
2.大多数公司都会考一些很基础、但易忘的纯java知识点。栗:数组、链表的数据结构及区别;String源码的思考(equal,hasCode等);基础算法(冒泡,递归);Array、List、Set、Map小结;多线程知识点(run()、start()区别,wait,sleep区别);设计模式(主要都是考单例模式)。。。。。。
3.常见的Android问题。Activity、Service、Fragment生命周期;ListView&&RecyclerView;Binder、Handler通信(即使不懂原理也要扯点出来,哈哈);自定义View知识点;MVP、MVC架构;图片三级缓存;内存泄漏解决方法;ANR分析;应用登陆注册界面及逻辑的设计。。。。。。
4.可以尝试在面试过程中占主导地位,比如通过提一些犀利的问题,如果一直是面试官问问题,那么你很可能就被pass掉了(说的就是我!)。
5.要向阐明公司为什么要录用你而不是其他人。工作经验>工作年限,个人发展培养前景好等隐藏属性一般都会被小公司直接忽视掉,所以需要简洁明了同时略自信地说明你需要多少时间适应,适应后是否有能力独自承担开发任务等强有力的优势。毕竟小公司肯定是把利益及费用放在第一位的,人才与技术也是服务于他们的产品而存在的。
6.最有效的办法就是暂时别辞职,或者别裸辞,慢慢沉淀下来学点干货,RN、架构、设计模式等等。等你觉得跳槽后完全可以超越成千上万的竞争者拿到一份满意的offe才离职,因为目前对于初级工程师来说,好工作实在是太难找了!