对于大多数大三学生来讲,这个暑假是人生最后一个暑假。对于IT专业的学生来讲,开学后就要面对各大IT企业的秋招,不少人会成为从0开始的Android实习生。在Android初学之路上,每一个Android实习生都会遇到各式各样的瓶颈。程序员
克服瓶颈要从克服本身对一切瓶颈的偏见作起,把逃避瓶颈的行为变成享受瓶颈带来的乐趣的过程。要知道喜力比国产啤酒贵好多的一条重要缘由就在于喜力的瓶颈:你如今去买一瓶玻璃瓶装喜力,用手握住瓶颈,大拇指按住那颗星,而后用你最熟悉的动做撸瓶颈,你会喜欢这种手感的。json
Android布局和屏幕适配api
Android初学者遇到的第一个瓶颈就是Android 布局的编写。首先Android的layout是用XML写的,而大多数大学生在大学阶段学习网页制做,都是用HTML绘制基本控件,而后用CSS进行页面美化;而Android却用XML绘制界面,style也是用XML写。学习XML最重要的熟能生巧,多练习练习就顺手了,另外XML和HTML有不少类似的地方,好比padding与margin的区别都是同样的。缓存
此外Android系统碎片化严重,不一样型号的手机有着不一样的屏幕尺寸和不一样的分辨率。为了解决这个问题,咱们能够把背景贴图作成.9png格式,而且用内容和padding撑起控件。若是须要适配的机型实在太极端,咱们能够百分比布局解决这个问题——PercentRelativeLayout和PercentFrameLayout等。性能优化
不一样组件的生命周期网络
Android初学者遇到的第二个瓶颈就是生命周期,Android的生命周期主要有Activity生命周期、Fragment生命周期、Service生命周期三种。学很差Activity的生命周期,你作很差界面跳转的特效,也作很差系统Activity(相机等)的回调;学很差Fragment的生命周期,你写不出惰性加载;学很差Service的生命周期,你连后台运行都作不到。学习生命周期,要记住“文无图时少直观,图无文时难入微”,用图表辅助记忆。框架
网络请求和json解析ide
Android是移动互联网的重要组成部分,网络请求和Json解析是Android学习中的重要环节,不少初学者会在此处遭遇瓶颈。布局
为了突破这个瓶颈,初学者应该先选择合适的框架以尽快解决实习工做中的问题。经常使用的网络请求框架有Volley和OKHttp等;常见的json解析框架有Gson和Jackson等,若是你的求职目标是阿里巴巴集团,学习一下FastJson是能够助你一臂之力的;此外还有把网络请求和json解析整合到一块儿的Retrofit。性能
实习生初入企业,要记住用工做时间解决工做中的问题,知识的探索和能力的提高要利用本身的业余时间。下班后要学习以上框架的源码和实现原理,好比Android的网络请求必须在子线程中进行,不然会形成NetworkOnMainThreadException;如今的网络请求都是基于HttpURLConnection的,任何大谈HttpClient的资料都是过期的;还要弄清楚Handler的原理、ThreadPool的原理、AsyncTask的原理等;json解析方面的知识还有JSONObject和JSONArray的区别、Java的泛型机制、Java的反射机制等等。
图片加载和内存优化
Android机的价位通常比iPhone低得多,因此Android系统比iOS系统更容易遇到内存溢出问题(OutOfMemoryError,简称:OOM),这也是初学者常见的学习瓶颈之一。OOM最多发于图片,其次布局中嵌入的地图、视频等吃内存大户也是OOM的罪魁祸首之一。
解决加载图片的OOM应该先选择Picasso、Glide、Fresco等框架以尽快解决工做中的问题,而后利用我的时间学习Android缓存机制——LruCache和DiskLruCache;地图、视频的OOM应该在界面被回收时清除控件、中止服务;其余的OOM应该用弱引用和软引用解决。
RecyclerView
Android最经常使用也是最复杂的控件是RecyclerView(2014及之前的资料是ListView),由于滑动冲突、列表中数据修改等问题都会在RecyclerView中体现。为了克服这些瓶颈,必需要搞清楚RecyclerView.Adapter(也包括之前的BaseAdapter)的工做原理,ViewHolder的工做原理,以及ViewGroup的事件分发机制等内容,这些内容不下大力气学习是不能彻底掌握的。
克服了以上瓶颈后,估计实习生也该到了毕业转正的时间了,进阶路上还有新的瓶颈。新瓶颈有新的玩法:这种玩法须要双手操做,若是用另外一只手按住打开着的瓶口撸瓶颈,你能够一边撸一边使劲摇,玩HIGH的时候忽然松开按住瓶口的手。
自定义控件
Android自带的控件不能知足太复杂的界面控件需求,所以绘制自定义控件也是Android工程师的必备技能。绘制自定义控件须要掌握View的几个常见方法的重写,如onDraw()、onMeasure()、onLayout()等;对事件分发机制的了解也应该比RecyclerView更精熟;此外还须要掌握Canvas和Animator的相关知识,Android的Canvas和HTML5的Canvas有不少类似性,能够以此突破Canvas的学习瓶颈。
进程间通讯
不一样App之间以及同一个App的不一样进程之间须要多进程通讯,多进程通讯在视频播放等占用大量资源的场合是颇有必要的。进程间通讯的初学者百度“多进程”会被AIDL绕得云里雾里,其实你只要试试Messenger框架,一切进程间通讯的难题都会迎刃而解。
Android性能全面优化和crash分析
Android初学者会遇到的最后一个瓶颈是Android性能全面优化。前面提到的Android内存优化是Android性能优化中最重要的部分,但也只是一小部分,Android性能优化还包括安装包体量优化、GUI绘制优化、电量和流量优化等。
GUI方面能够利用ViewStub和去掉其余没必要要的背景来避免OverDraw;安装包体积能够用压缩图片、去除重复且无用的依赖等方式进行优化;电量和流量能够经过用推送代替轮询、用GZIP文件格式下载过长的数据流等方式进行优化。
在移动应用性能方面,崩溃(Crash)带来的影响是最为严重的,Crash指App在运行过程当中出现大段用户正在进行的操做的强制关闭现象。Crash会形成关键业务中断、产品口碑变差、用户流失等问题。Crash能够用UncaughtExceptionHandler捕捉,也能够利用UMeng和Bugly等服务分析,请注意:若是打算跳槽到阿里,就用UMeng,想要跳槽到腾讯,就用Bugly。
突破了上述全部瓶颈之后,Android程序员的技术水平均可以达到独当一面的程度,甩掉了初学者帽子的程序员会发现头顶再也不是瓶颈,而是从技术到管理的天花板。