前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >注意!进阶Android高级开发这些坑不得不避免,相对的技巧要会用,量变到质量的过程

注意!进阶Android高级开发这些坑不得不避免,相对的技巧要会用,量变到质量的过程

原创
作者头像
Android技术干货分享
修改2021-04-21 10:08:48
1K0
修改2021-04-21 10:08:48
举报
文章被收录于专栏:Android技术分享

程序员这个行业,日新月异,技术体系更新速度快,新技术新框架层出不穷,所有的技术都像是一个无底洞,当你学得越多就会发现不懂的越多,不懂的越多,需要学习的就更多。

因此,一旦选择了这个行业,就意味着你必须不断学习才能跟得上大家的脚步,而要想成为一名优秀的程序员,更是需要通过正确的方法,设定正确的目标来进行不断地学习。

为了帮助部分同学解决一些学习上的困惑,今天我就来分享和探讨下我的一些学习经验,大家如果有什么意见或建议,欢迎在评论中留言。

一、Android学习路上踩过的坑和各种瓶颈总结

对于大多数学生来说,对于IT专业的学生来说,现在正在面对各大IT企业的秋招,很多人会成为从0开始的Android实习生。在Android初学之路上,每个Android实习生都会遇到各式各样的瓶颈。

克服瓶颈要从克服自己对一切瓶颈的偏见做起,把逃避瓶颈的行为变成享受瓶颈带来的乐趣的过程。要知道喜力比国产啤酒贵好多的一条重要原因就在于喜力的瓶颈:你现在去买一瓶玻璃瓶装喜力,用手握住瓶颈,大拇指按住那颗星,然后用你最熟悉的动作撸瓶颈,你会喜欢这种手感的。

1、Android布局和屏幕适配

Android初学者遇到的第一个瓶颈就是Android 布局的编写。首先Android的layout是用XML写的,而大多数大学生在大学阶段学习网页制作,都是用HTML绘制基本控件,然后用CSS进行页面美化;而Android却用XML绘制界面,style也是用XML写。学习XML最重要的熟能生巧,多练习练习就顺手了,另外XML和HTML有很多相似的地方,比如padding与margin的区别都是一样的。

此外Android系统碎片化严重,不同型号的手机有着不同的屏幕尺寸和不同的分辨率。为了解决这个问题,我们可以把背景贴图做成.9png格式,并且用内容和padding撑起控件。如果需要适配的机型实在太极端,我们可以百分比布局解决这个问题——PercentRelativeLayout和PercentFrameLayout等。

2、不同组件的生命周期

Android初学者遇到的第二个瓶颈就是生命周期,Android的生命周期主要有Activity生命周期、Fragment生命周期、Service生命周期三种。学不好Activity的生命周期,你做不好界面跳转的特效,也做不好系统Activity(相机等)的回调;学不好Fragment的生命周期,你写不出惰性加载;学不好Service的生命周期,你连后台运行都做不到。学习生命周期,要记住“文无图时少直观,图无文时难入微”,用图表辅助记忆。

3、网络请求和json解析

Android是移动互联网的重要组成部分,网络请求和Json解析是Android学习中的重要环节,很多初学者会在此处遭遇瓶颈。

为了突破这个瓶颈,初学者应该先选择合适的框架以尽快解决实习工作中的问题。常用的网络请求框架有Volley和OKHttp等;常见的json解析框架有Gson和Jackson等,如果你的求职目标是阿里巴巴集团,学习一下FastJson是可以助你一臂之力的;此外还有把网络请求和json解析整合到一起的Retrofit。

实习生初入企业,要记住用工作时间解决工作中的问题,知识的探索和能力的提升要利用自己的业余时间。下班后要学习以上框架的源码和实现原理,比如Android的网络请求必须在子线程中进行,否则会造成NetworkOnMainThreadException;现在的网络请求都是基于HttpURLConnection的,任何大谈HttpClient的资料都是过时的;还要弄清楚Handler的原理、ThreadPool的原理、AsyncTask的原理等;json解析方面的知识还有JSONObject和JSONArray的区别、Java的泛型机制、Java的反射机制等等。

4、图片加载和内存优化

Android机的价位一般比iPhone低得多,所以Android系统比iOS系统更容易遇到内存溢出问题(OutOfMemoryError,简称:OOM),这也是初学者常见的学习瓶颈之一。OOM最多发于图片,其次布局中嵌入的地图、视频等吃内存大户也是OOM的罪魁祸首之一。

解决加载图片的OOM应该先选择Picasso、Glide、Fresco等框架以尽快解决工作中的问题,然后利用个人时间学习Android缓存机制——LruCache和DiskLruCache;地图、视频的OOM应该在界面被回收时清除控件、停止服务;其他的OOM应该用弱引用和软引用解决。

5、RecyclerView

Android最常用也是最复杂的控件是RecyclerView(2014及以前的资料是ListView),因为滑动冲突、列表中数据修改等问题都会在RecyclerView中体现。为了克服这些瓶颈,必须要搞清楚RecyclerView.Adapter(也包括以前的BaseAdapter)的工作原理,ViewHolder的工作原理,以及ViewGroup的事件分发机制等内容,这些内容不下大力气学习是不能完全掌握的。

克服了以上瓶颈后,估计实习生也该到了毕业转正的时间了,进阶路上还有新的瓶颈。新瓶颈有新的玩法:这种玩法需要双手操作,如果用另一只手按住打开着的瓶口撸瓶颈,你可以一边撸一边使劲摇,玩HIGH的时候突然松开按住瓶口的手。

6、自定义控件

Android自带的控件不能满足太复杂的界面控件需求,因此绘制自定义控件也是Android工程师的必备技能。绘制自定义控件需要掌握View的几个常见方法的重写,如onDraw()、onMeasure()、onLayout()等;对事件分发机制的了解也应该比RecyclerView更精熟;此外还需要掌握Canvas和Animator的相关知识,Android的Canvas和HTML5的Canvas有很多相似性,可以以此突破Canvas的学习瓶颈。

7、进程间通信

不同App之间以及同一个App的不同进程之间需要多进程通信,多进程通信在视频播放等占用大量资源的场合是很有必要的。进程间通信的初学者百度“多进程”会被AIDL绕得云里雾里,其实你只要试试Messenger框架,一切进程间通信的难题都会迎刃而解。

8、Android性能全面优化和crash分析

Android初学者会遇到的最后一个瓶颈是Android性能全面优化。前面提到的Android内存优化是Android性能优化中最重要的部分,但也只是一小部分,Android性能优化还包括安装包体量优化、GUI绘制优化、电量和流量优化等。

GUI方面可以利用ViewStub和去掉其他不必要的背景来避免OverDraw;安装包体积可以用压缩图片、去除重复且无用的依赖等方式进行优化;电量和流量可以通过用推送代替轮询、用GZIP文件格式下载过长的数据流等方式进行优化。

在移动应用性能方面,崩溃(Crash)带来的影响是最为严重的,Crash指App在运行过程中出现大段用户正在进行的操作的强制关闭现象。Crash会造成关键业务中断、产品口碑变差、用户流失等问题。Crash可以用UncaughtExceptionHandler捕捉,也可以利用UMeng和Bugly等服务分析,请注意:如果打算跳槽到阿里,就用UMeng,想要跳槽到腾讯,就用Bugly。

突破了上述所有瓶颈以后,Android程序员的技术水平都可以达到独当一面的程度,甩掉了初学者帽子的程序员会发现头顶不再是瓶颈,而是从技术到管理的天花板。

二、成为 Android 大牛的10大独门秘籍

成为一个 Android 开发者不难,想成为一个鹤立鸡群、卓尔不凡的高手却难上加难。想成为绝世高手,要投入大量的时间、精力与专注,要耐得住寂寞、受得了挫折,上得了刀山、下的去火海......这条高手之路没有捷径,有多少付出就会有多少回报。

老司机在这里整理为你了一份 Android 高手10大必经之路,让你少走弯路,快速走上人生巅峰。

1. 深入了解 Android 开发框架

我指的不是文档,而是要深入了解实际的 Android 框架代码。大多数开发者不敢深入了解Android 框架内部,就像一个只会做简单改装、却不了解汽车内部构成的所谓”汽车工程师”一样。不要害怕,这是成为开发高手的必经之路,随着深入了解,你会惊喜的发现程序运行背后的原理。

2. ”读”更多更多的代码

大多数开发者并没有花太多时间阅读其他人的代码,他们大部分时间在重复自己熟悉的代码。

但这并不能让你成为一个优秀的开发者。想做到更好,就要多读其他优秀开发者的代码。你应该多读开源软件代码,通过读代码你将发现许多编码技巧、以及你从未了解过的功能与实现方式。

3. 学更多的语言

再多学一些编程语言,你应该跟上行业发展的趋势,不要将自己局限在 Android 的小世界中。在学习新语言的同时,你会扩展自己的视野,也会相应反过来提升你的 Android 开发技术。每年都学习一门新语言吧。

小技巧:如果你不知道从哪门语言开始,就选Python吧,作为人工智能时代崛起的语言,现在已经成为热门语言,相关职位需求和薪酬也是水涨船高。如果不想说Python,那就学Javascript吧!

4. 学习 Java 设计模式

我不想再强调设计模式对于你的安卓开发生涯有多么重要。当你在解决编程问题时碰到瓶颈,设计模式都是你最好的救星。

开始认真学习设计模式,在其他开发者说起Factory, Decorator, 或者Facade pattern时,你要知道他们在说什么。好吧,从现在开始,每周学习一种新设计模式,直到你掌握绝大部分。

5.为开源社区作出贡献

如果你开发了一个插件、库或者其他有用的代码,并且已经使用在你的app中,去贡献到开源社区吧。将项目开源、并且维护自己的开源项目,你将从中受益良多。在开源项目中,你将成为一名更优秀、更高端的开发者。

如果没有可开源的项目,你可以考虑为感兴趣其他项目作贡献,修复漏洞、完善文档、写一些测试等等。很小的一点贡献,对于开源项目维护者来说是一个很大的帮助。

6. 定制你的IDE

花一点时间了解你正在使用的开发环境:Android Studio。IDE能做到比你想到的更多的事情,他里面隐藏着大多数开发者所不知的功能和快捷键。多了解你的开发环境,这会极大提高你的工作效率。

7. 学习更简洁的 Android 编码标准

学习编码标准,在一个团队开发时代,维持简洁的编码标准会让你受益匪浅。当然,这不是复杂的火箭发射流程,你只需花很少的时间就可了解Android编码标准。

8. 花点时间学习 Android 最佳实践

学习 Android开发的最佳实践,了解建议与禁忌将帮助你成为更好的开发者,当然更能让你的app 独树一帜。

9. 学点设计

如果你想成为全能开发者,你应该花点时间学习并理解UI和UX,这会帮助你从新的角度看待你的代码。

小技巧:读读这本<设计心理学>,了解设计的原理。

10. 加入Java和Android架构圈

作为一个Android 开发者,必须要加入一个Android架构学习圈,在里面,Android 大牛云集,高手过招!大家一起互相学习交流技术问题,让你一步一步成为Android高手,助你进阶为Android架构大牛。

三、Android进阶之路

技术的学习是个日积月累,由量变到质变的过程,按照上述的方法,并且能够持之以恒地学习下去,经过几年的历练,你已经可以超越大部分程序员了。

但是要想成为一名不被淘汰的真正的大牛级程序员,却还有很长的路要走。

想要不被淘汰意味着什么?意味着你写的东西需要足够核心,并且很难被年轻人替代,如果仅仅停留在使用某门技术或是框架上,随着年龄的增长,你的自身价值是会越来越低的(如果转管理,那就另说了)!

如果有心继续深耕技术的同学,可以参考下下面我工作几年收集总结出来的Android学习路线:

1、看视频进行系统学习

前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。

另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。

2、进行系统梳理知识,提升储备

客户端开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

  • 架构师筑基必备技能:深入Java泛型+注解深入浅出+并发编程+数据传输与序列化+Java虚拟机原理+反射与类加载+动态代理+高效IO
  • Android高级UI与FrameWork源码:高级UI晋升+Framework内核解析+Android组件内核+数据持久化
  • 360°全方面性能调优:设计思想与代码质量优化+程序性能优化+开发效率优化
  • 解读开源框架设计思想:热修复设计+插件化框架解读+组件化框架设计+图片加载框架+网络访问框架设计+RXJava响应式编程框架设计+IOC架构设计+Android架构组件Jetpack
  • NDK模块开发:NDK基础知识体系+底层图片处理+音视频开发
  • 微信小程序:小程序介绍+UI开发+API操作+微信对接
  • Hybrid 开发与Flutter:Html5项目实战+Flutter进阶

知识梳理完之后,就需要进行查漏补缺,所以针对这些知识点,我手头上也准备了不少的电子书和笔记,这些笔记将各个知识点进行了完美的总结。

主要内容:

Java 基础(★★)

  • 面向对象思想
  • 多态
  • 异常处理
  • 数据类型
  • Java 的 IO
  • 集合
  • Java 多线程

Java 高级(★★)

  • Java 中的反射
  • Java 中的动态代理
  • Java 中的设计模式&回收机制
  • Java 的类加载器

Android 基础(★★★)

  • Android 基本常识
  • Activity
  • Service
  • BroadCastReceiver
  • ContentProvider&数据库
  • Android 中的布局
  • ListView
  • JNI & NDK
  • Android 中的网络访问
  • Intent
  • Fragment

Android 高级(★★★)

  • Android 性能优化
  • Android 屏幕适配
  • AIDL
  • 自定义控件
  • Android 中的事件处理
  • Android 签名
  • Android 中的动画
  • 网络协议
  • 其他

3、读源码,看实战笔记,学习大神思路

“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。

主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。

4、面试前夕,刷题冲刺

面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。

关于面试刷题,我个人也准备了一套系统的面试题,帮助你举一反三:

以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。

当你有了学习线路,学习哪些内容,也知道以后的路怎么走了,理论看多了总要实践的。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Android学习路上踩过的坑和各种瓶颈总结
    • 1、Android布局和屏幕适配
      • 2、不同组件的生命周期
        • 3、网络请求和json解析
          • 4、图片加载和内存优化
            • 5、RecyclerView
              • 6、自定义控件
                • 7、进程间通信
                  • 8、Android性能全面优化和crash分析
                  • 二、成为 Android 大牛的10大独门秘籍
                    • 1. 深入了解 Android 开发框架
                      • 2. ”读”更多更多的代码
                        • 3. 学更多的语言
                          • 4. 学习 Java 设计模式
                            • 5.为开源社区作出贡献
                              • 6. 定制你的IDE
                                • 7. 学习更简洁的 Android 编码标准
                                  • 8. 花点时间学习 Android 最佳实践
                                    • 9. 学点设计
                                      • 10. 加入Java和Android架构圈
                                      • 三、Android进阶之路
                                        • 以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容。或者点击 【这里】 查看获取方式。
                                        相关产品与服务
                                        云开发 CloudBase
                                        云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
                                        领券
                                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档