Android 开发进阶指南

本文探讨Android开发新手遇到的瓶颈问题,提供解决方案,包括提高解决问题的能力、阅读和理解源码、深入理解Java和Android、了解编译原理等。建议通过阅读源码、使用高级库、学习编译原理等方法来提高技能。

之前有人在朋友圈评论我说,现在学习Android 遇到了瓶颈,基本上一般的API,市面上大部分App UI 都能做出来,该怎么提高?然后我回复他了,我学习Android 也有一年左右,也是个菜鸟,也遇到这样的问题,所以就各种查资料,看看大神们都在研究什么技术,也跟着学习学习。当初在逛知乎看到了一些问题(PS:逛知乎还是很有好处的嘛!!!),看到很多回答就觉得很受启发,还有看别人的博客,也很受用,想要写一篇文章的想法,等了一两周才开始动手。


新手学习遇到瓶颈

我觉得新手做的更多是重复的工作,可能接触好的项目,前一两个月会觉得学到好的东西,但是随着公司的东西慢慢熟悉,也就变成日复一日的重复劳动,然后慢慢感觉也就学习遇到了瓶颈,而一些太难的东西又不太情愿去琢磨,比如读Android 源码,你使用Handler Loopeer 感觉很巧妙,可以仔细研究一下;还有就是很多第三方开源库你使用起来很方便,如果这个时候你仔细阅读源码,也一定能感受它的设计的巧妙。因此,我多方搜集,整理出来了以下几条,有一定经验接下来要做的事。

  • 解决问题的能力。可能老手的遇到的Bug 可能比你写的代码都多。

  • 阅读和理解源码。新手可能就是使用API,而老手会去阅读源码,理解开源项目或者Android 系统的源码,理解他们的架构。

  • 深入理解Java 和Android 。Android 应用层的东西基本上基于Java,想要写好Android,Java 已经要过关。

  • 了解编译原理等CS基本知识。我觉得这一条是每个程序员应该必备的。比如像计算机网络(HTTP,TCP/IP),算法与数据结构。
    下面我会分别按照这几点给大家详细讲解(其实是来看看大牛们的演讲)。


解决问题的能力

我觉得这个我没有能力回答,不过之前有幸听过一个演讲,@阿拉神农 邓凡平老师在北京GDG DevFest 的一个演讲,说过你进入一个项目组,不要惧怕问题和Bug,你把很多问题解决了,你的技术也会上升到一个层次。邓老师在文中也提到了怎么学,学到什么程度,以及学什么,还专门提到多线程,网络(HTTP,TCP/IP)编程,设计模式这些基础东西,就算Android 有一天不行了,这些东西也一样会被吸收借鉴的。


关于演讲的内容:《Android开发进阶之旅》
http://weibo.com/1826440077/D36AAiF2G。

注:邓老师从事软件开发有十余年,之前是做底层开发,现在在做应用层的开发,他也是《深入理解Android》系列书籍的主要作者之一。


阅读和理解源码

这个问题我也没有多大能力去回答,也读过一些开源库的源码,像Retrofit,Volley,还有像Handler Loopeer 的机制,其他的虽然阅读过,但是没有理解太深,这也是我以后努力的方向。还有人问问什么要读源码,我想说,如果你写写XML 布局文件,会用用API,一个实习生两三个月就和你差不多了,你还有什么资历说你很有经验,知其然知其所以然说的就是这样的意思,阅读和理解源码让你更好使用API,解决问题的能力也大有提高,也有了造轮子的能力。当然了跳槽面试的时候也可以吹牛逼了。

下面的两篇文章是Kaede 的博客上两篇文章,他也有自己的知乎专栏——《中二病也要开发Android》。Kaede 在文中阐述了,为什么要阅读Android 源码,以及该怎么读,还有要读哪些,对于源码接触不太多的同学有个参考,也推荐一些大牛的博客,站在巨人的肩上,有了前人的参考,也会事倍功半的。


深入理解Java

Java语言相对来说比C++ 简单很多,但是对于经常写业务代码的人,对于如何写出优雅的java代码以及如何辨别垃圾代码,还有Java的内存模型/GC,并发机制,虚拟机执行流程肯定不甚了解,因此,这个阶段,我打算大致搞清楚Java语言本身,顺便从这个角度切入编程语言本身;主要如下:

  • 学习如何写更好的Java 代码,《Effective Java》值得一读。

  • 什么样的Java 代码是有问题的?《Java解惑》;怎么改写代码?《重构》

  • 学习一些没有接触过的Java 高级库,NIO/AIO, concurrent/forkjoin等,有机会使用到工作过程中。

  • 了解Java 虚拟机 《深入理解Java 虚拟机》《实战Java 虚拟机》;从这里,可以知道很多JVM 的运行原理,内存模型,class 文件格式,Java 并发原理,虚拟机执行引擎等相当多的东西;虽然说Android 的虚拟机Dalvik 和ART(ART 也许称不上虚拟机)使用的不是标准的HotSpot 但是,我相信原理都差不多。


但是,Java平台的技术栈远非这么一点,学无止境;走到这一步,我觉得对于Java语言已经算得上掌握了,于是主要目标转向编程语言本身。


深入Android

这一块有很多人分享过经验,其实无非那么几点,我就简单重申一下吧。

  • IPC机制,Binder和匿名共享内存等

  • 四大组件启动,工作原理

  • View系统,绘制原理,事件分发

  • 动画框架,原理

  • 多线程机制,消息机制 AsyncTask,Thread/Handler

  • 系统启动过程,system_server启动过程

  • Window系统,Window创建过程

  • 资源管理系统,资源加载机制等


《Android 开发艺术探索》这本书确实不错,适合中级程序员。个人感觉《Android 内核剖析》挺不错的,虽然有点过时了也买不到书了。  《Android 源码设计模式》,在Android 的源码中都有什么使用哪些设计模式,也让你更深入去理解源码。

当你搞清楚了这些,基本上你写的什么代码在Android 上层是怎么运作的都了然于胸;FrameWork 层的任何问题也拦不住你的脚步了;不过这个阶段,仅仅是了解了Android 系统Framework 层的原理,对于怎么写代码,对于语言本身,对于Android 系统底层的原理依然很迷惑,没事,已经看到了光了,一步一步来。


除了Android 源码值得读的,还有第三方的开源库也是值得一读的,有的开源库甚至比官方的更加好用,比如像我们常用的Retrofit,OkHttp,Picasso,Volley,EventBus,Dagger,我们基本上都能熟悉使用,Trinea 和一些大牛在Github 做的一个项目,专门分析了开源项目,我们可以参考着来看。


我觉得新手阅读源码的姿势还是有点弱,当然站在巨人的肩膀就会事半功倍,所以看看大牛写的文章还是很~(≧▽≦)/~涨姿势的。


了解编译原理等CS基本知识

推荐一下R 大的书单吧:http://zhuanlan.zhihu.com/hllvm/20130808。
当然由于定位不一样,我肯定不会像他一样专门搞搞基语言虚拟机(主要是我没那个水平!),仅供参考;我自己目前看的几本书如下:《编程语言实现模式》《深入理解计算机系统》《SICP》《编译器设计》;然后由于在学Haskell,所以在追github上一个项目,sdiehl/write-you-a-haskell ;具体怎么做还是边走边瞧。
后面的我也不敢说太多,目前打算是希望深入了解Linux内核,以前看过《深度探索Linux 操作系统:系统构建和原理解析》;打算看《深入Linux内核》《Unix环境高级编程》;只要越过了浮躁期,其实目标还是很明确的;知道自己该学习什么,也知道大致该怎么做;感觉自己走在正确的路上,越来越接近那个目标,每天都充满希望。



参考


本文部分章节参考来自weishu 在知乎上面的回答。

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值