安卓不知道怎么学?看十年码农如何回答这个问题。

image

有很多朋友问过怎么学习 Framework,之前写了三篇文章,主要说的是之前开发应用的如何过渡到开发 Framework 。喜欢的可以通过下面的链接阅读。

Android 如何从应用深入到Framework (一)

Android 如何从应用深入到Framework (二)

Android 如何从应用深入到Framework (三

写完这个,发现还是有很多人迷惑,不知道 Android 该怎么学习,于是今天抽空,聊聊关于学习方法,以及 Android 具体该怎么去学。

在开始今天的文章之前,先插入一段这些年我所折腾的内容:

2010-2013 功能机时代,以 Mstar、MTK、 展讯平台为主,负责通话相关模块,比如 InCallUI 、Dialer 、PhoneBook为主。同时完成三方应用对接工作,比如移植 QQ,移植游戏中心。在这个期间主要收获是,阅读代码的能力,以及形成了框架思维。

2013-2016 智能机时代,以 MTK、 展讯、 高通平台为主,负责系统需求开发,应用开发,比如权限管理分析,系统框架调试,快速定位界面信息,商业化 APP,CM 移植红米2,三方 rec twrp 源码分析,实现工模测试程序。在这个期间主要是深入代码,开始进入系统框架,启动过程,开始深度定制系统,完成了自己商业化思维雏形。

2016-2019 自媒体时代, 在公号开始输出技术文章,以分析三方开源库,多窗口分屏源码剖析,HOOK 机制以及 Android NDK 开发讲解。同时输出自己的商业思考,赚钱逻辑,建立个人IP。

以上是对于我这些年做的事情,做的一个简单梳理,有很多分支,就不过多涉及了。

这些年来,有很多人夸我能力强,而我实际晓得这里面的原因,并不是天赋造成的。

前段时间,花了一个月时间,阅读了程序员中一些牛人的成长故事,梳理出来很多关键字,我把这些筛检后,总结了四个出来:

  • 自学能力

  • 时间管理

  • 升维能力

  • 自我激励

自学能力是排在第一的,这个是从我自身出发,得出的结论。大学期间要说什么对我有着深远的影响:

一个是自学能力,一个是写作

在自学计算机方面,触发我去做这个的原因是,数字电路学得很好,C 语言比较感兴趣。

而我找到了一个切入的路线,就是学习 80C51 单片机。这个是脱离了操作系统,简单直接操作硬件 Pin 脚,使用仿真器可以来直接模拟个 C51 开发板。

这个是开端,痛苦不言而喻。无法理解地址,偏移,中断向量,以及堆栈平衡,这个时候就遇见了操作系统。进入操作系统,算是进入了漩涡,陷在里面不断挣扎,又不断的挑战,期间报了个培训班,是做 ARM嵌入式开发,进而接触到了 μC/OS-II 小型操作系统,在老师的带领下,最终算是将基础打通,剩下的便是自己琢磨,反复练习,阅读代码。

每个人自学的路线不一样,我是在宿舍自学的。我不习惯自习室安静的氛围,同时我的学习状态,不是一个事情专注一天,而是一个事情就坚持半小时,随即切换到娱乐,或者是休息,跑别的宿舍转圈溜达。这个是我自学中的调节,现在也晓得这个跟番茄时间是基本吻合的。

**我们很多时候总结的东西,都是自己踩坑之后才深刻理解。**在你没有总结出自己的高效学习方法之前,你就只剩下大量的刻意练习,从而找到自己的路线,这里没有捷径。

我们很多人会随口说出那句:

我要花时间,也能跟他一样牛!

可实际结果是你只是嘴上说说而已,并没有实际去做。比如我说这个就是坚持,用时间累积出来的成绩。大家通常会觉得坚持只要自己想做,就是轻而易举的。

实际是,

坚持看起来很简单,但却很难。

那些最终成功的人,有很强的时间观念。他们晓得他们的成绩是时间复利出来的,我们很早就学过,不积跬步无以至千里。可是有多少人真的去积跬步呢?

我们习惯去议论别人的成绩,羡慕他们的成就,然后轻易的否定自己,把别人的都归于好运而已。我在观察这些成功大牛之后,发现他们除了自学能力超强之外,还有的就是时间管理。

你与他们约定饭局,他们能够提前预定好路线,基本能做到准时,而且他们尊重你的时间,会比较聚焦的聊一些话题,不会漫天聊天,没有重点。同时他们也会对这次饭局做简单的复盘,大概聊多久,自己今天还有什么事情要办。

我之前也是没有时间概念的,导致的结果就是丢三落四,做事没有轻重缓急,弄得自己又忙又累,却看不到结果。随后我便开始列任务清单,就在手机上记。

当我慢慢习惯这么来做的时候,发现我做事情高效了,我能分清什么是今天需要完成的,什么是没有做完,当下要完成的是哪些任务。

任务清单比起那个时间四象限来说,很容易执行。就是把自己随后要做的事情排序,把当下要完成的排到前面,哪个可以取消就往后放,或者干脆去掉。这个在时间管理的书里叫做吃掉青蛙,而吃掉青蛙的步骤就是拆成一些蝌蚪,一个个来完成,遵循 SMART 规则。

SMART原则(S=Specific、M=Measurable、A=Attainable、R=Relevant、T=Time-bound)是为了利于员工更加明确高效地工作,更是为了管理者将来对员工实施绩效考核提供了考核目标和考核标准,使考核更加科学化、规范化,更能保证考核的公正、公开与公平。

完成任务就会不断地累积成就感,我在做这个之外,会做一个叫做每日复盘的动作。也就是我每天会有具体的计划,哪些要今天完成,哪些是这周完成的,时间要定到具体的某一天。

每日复盘 的意义是巨大的。通过这个可以很清楚的知道自己哪些方面做得不好,用奖励的方法填充到你的任务当中,把每天的任务在早上计划出来,然后随着工作中加入任务,在这个任务清单中插入进去。

如果明天有计划,那么准备工作我是放到今天晚上,而不是明天早上。因为今天晚上时间充足,能够保证不落掉任何东西。同时也能在明天起来的时候,不显得太赶忙。

在做一件的时候,可以使用 PDCA 进行迭代。PDCA 具体为:

PDCA循环是美国质量管理专家休哈特博士首先提出的,由戴明采纳、宣传,获得普及,所以又称戴明环。全面质量管理的思想基础和方法依据就是PDCA循环。PDCA循环的含义是将质量管理分为四个阶段,即计划(Plan)、执行(Do)、检查(Check)、处理(Act)。在质量管理活动中,要求把各项工作按照作出计划、计划实施、检查实施效果,然后将成功的纳入标准,不成功的留待下一循环去解决。这一工作方法是质量管理的基本方法,也是企业管理各项工作的一般规律。[1]

除此之外,我也没有其他高级的技巧,

我们要先从外驱动力进行训练,然后逐步获取金钱,或者荣誉,这些刺激你,将外驱动力转化为内驱动力,从而形成习惯。

当你掌握了时间和任务的搭配方式之后,剩下的就是持续行动,不放弃。在行动中不断践行 MVP ,也就是我们讲的瀑布开发模型。像个漩涡一样,一圈一圈,一直到最强最大。

当你这样子持续坚持着,你便能够很敏锐的捕捉到一些信息,也就是所谓的外行看热闹,内行看门道。当大家都在人云亦云,吐槽焦虑的时候,你发现你也会遇到这个问题,所以你开始尝试,

投资自己,丰富知识体系。

升维能力是怎么出来的呢?我在大学期间,贴在课桌墙上的一句话是,每天进步一点点。我在大学一直用这句话在激励自己。职场中可以再修正一下,变成比别人多想一步,你就离成功更进一步。

这里的升维能力主要体现在,大家都在讨论具体技术的时候,你在想这个技术解决了什么问题,复杂度,以及客户时效性。你能够脱离技术,从市场,商业模型去考虑问题。

当大家都厌倦加班的时候,你能够知道自己的诉求,知道自己加班在做什么,自身在怎样的成长,是否是自己预期的结果。我在看牛人的故事的时候,所谓时间管理,以及勤奋,努力,不也是自己给自己加班吗?

多处在老板的位置思考,同时多考虑自己的未来。

如果你没有这么拼命,那么你的技术卓越靠的是天赋?我们再想一下你多年之后能够从容应对,技术出类拔萃,不是在公司加班,就是在家加班了。升维能力能够让你看的更长远,也让你能够看清,这一切都是在为自己投资。

我们想下,你工作最终想做什么?想当领导,想做老板,想创业找投资,想做自媒体。这个就是你在提前布局,那么你必须升维,先匹配接触这些信息,你才能够看得透彻,知道自己现在的付出,未来都会开花结果。

你总想着占便宜,那么谁要吃亏?只有利他了,最终才会利己。

这句话又是一个看起来很简单,却很难做到的。

最后我再说说这个自我激励,因为我们的惰性,以及短视,导致我们坚持一件事总是半途而废,总想着很快见效果。

可世界很多时候就是反常识的,求而不得,越急越错。只有你稳扎稳打的成功,你遇见的问题,你经历的事情,才能让你这个系统稳固,不会轻易被人攻陷,所谓有了防御力,抵御风险的能力。

俗话说的好,

肚子有货,心里不虚。

要有目标,分阶段目标和长远目标。长远目标是个奔头,阶段目标是不断靠近。也就是年计划,月计划这种。只有你把年计划拆成月计划,月计划分摊到每一天,你才能够真正的行动起来。

自我激励很重要,你为什么拼命?你要实现什么目标,这个很重要。你要赚多少钱,你要用钱做什么,升维能力又体现出来了。

当你突然心动地时候,就是你要开花结果时候,这个时候要谨记,要行动了,否则只会望梅止渴,望洋兴叹了。

讲完了这个,我们再来看看 Android 当前市场需求都有哪些方向:

image

原生开发,主要以大平台为主。因为它的成本比较高,需要安卓,IOS 和 Web 各个方向都要投入人力。做系统维护的,接触的系统级别的 APP,基本都是原生开发的,不会是跨平台。这里就是牵扯一些开源框架,像 MVP  、MVVM 框架,以及开源 okhttp 、Retrofit 等等。

跨平台开发出现在小公司,以及需要快速迭代的场景下,它能够快速推送到各个平台,能够实现后台热更,可以方便的修复问题。主要技术有 react-native 和 Flutter 。

系统移植和裁剪,主要是以 Linux 驱动为核心,同时移除一些系统服务,开发一些守护进程。这个以 C 、C++为主,门槛比较高,有驱动经验,对操作系统有概念。

这个主要的市场就是那些性能要求较高的场景,需要启动快,比如路由器。

电视盒子这里需要掌握的是 TV 开发场景,它跟我们普通的开发有区别,因为不是触摸响应,而是按键,需要焦点切换,以及实现一些软键盘之类的东西。

智能门锁,需要的和嵌入式开发差不多,安卓系统也可以来实现,这里除了硬件驱动,还有就是上层的指纹识别,以及屏幕显示,监控系统。

音视频开发随着这个 5G 到来,流量问题解决,会是个强需求。相关的抖音,快手这些,对于音视频的需求很大。这里开源的项目主要是 FFmpeg sdl2 ,如果要说更多的话,那么加上  opengl es,以及 glsl 或者其他的 gpu编程。

系统级别的开发,以虚拟机优化,分身,系统广告拦截,通知管理,权限,静默安装,分屏,像 APP 的插件化编程,注解编程这些,APM 性能监控,sysTrace 分析,蓝牙 Wifi 功能定制等等。

其余的就是在细分领域,虚拟机优化,xHOOK,xp插件 开发,辅助功能开发,自动化测试脚本,浏览器开发,GPS硬件 芯片调优,音频,相机调优等等。

接下来说说具体该怎么学习,这里写个我学习的路线,更多细致学习,需要自己百度检索,找到学习资料。

这里具体为:

image

除此之外,还有这些:

image

View 这里主要以 TextView 、Button 这种为主,主要是去熟悉如何开发一个应用,如何调试,如何布局。这里比较关键的是,如何自定义View,懂得核心的三个方法,测量,布局,绘制,同时知道绘制的一些方法,比如 Path,以及 xor图像 混合,画一个仪表盘,以及动画。

这个学习完了后,开始进入 SurfaceView 学习,这个学习 openGL es 的开发流程,绘制过程,以及语法,生命周期。为什么学习这个呢,因为很多开源库,就是用的这个,比如 cocos2dx 、 libgdx ,游戏引擎大多数都是这种,因为耗时,而这个 SurfaceView 是另开辟的线程,所以没有这问题,并且直接对应一个 Layer,可以快速绘制。

四大组件是个宝藏,

Android 开发的四大组件分别是:活动(activity),用于表现功能;服务(service),后台运行服务,不提供界面呈现;广播接受者(Broadcast Receive),勇于接收广播;内容提供者(Content Provider),支持多个应用中存储和读取数据,相当于数据库。

这里主要学习,每个组件完成 Demo,知道使用方法,场景。startActivity() 、startService()、sendBroadcast() 、ContentProvider.query() 这些方法是一个引子,它是撬动你进入系统代码的一个个线索。

于是我们跟着这些方法,参考网上文档,使用调试技巧,开始分析,画流程图,当你把这些跟踪完了之后,你对系统就不会再陌生,也不会畏惧。

在这个过程里面,同步穿插着来学习 系统启动过程,System_server 进程启动过程,AMS 、WMS 、PhoneWindowManager 初始化过程。

这两个会同步进行,最终在系统框架汇合,你便将这个线路打通。而在这个应用和系统之间,是可以通过分析 SystemUI 和 Launcher 的启动过程,来掌握这些知识。

这些都掌握了,也就是主线已经打通,剩下的就是继续蔓延,将自己感兴趣的学习起来。比如 SF 学习绘制相关,Binder,SELinux 安全模型。

关于调试,主要是 调试 JAVA ,调试系统,调试 NDK ,调试 Smali,这个大家点击上面的文字,可以直接跳转过去阅读。

总结下学习过程,主要就是寻找线索(兴趣),持续行动(画流程),调试跟踪,总结收获。在工作中就是,处理一个问题的时候,需要使用三步法,分析,定位,解决。而你要成长起来,实际这个后面需要一个沉淀,这个很大程度我们会忘掉,所以才学得不牢靠。

最后,想再说说关于如何构建自己的知识体系,主要的方法为:

image

关于点线面,之前写过一篇文章,大家可以点击阅读。这里简单说下,

点线面的理论,就是寻找一个突破口,先进入市场,然后不断地积累,将点串成线,然后再深入下去,形成面。每一面起来之后,就是一个体系,你的能力矩阵就在这个框里面。

总分总针对的是学习新的知识,需要做的策略,先整体阅读概念,使用场景,以及它的优缺点,随后就是细分,开始实践,分为学习实例,掌握实例,应用实例,做出产品,最终再回到总结,加深对这个新的知识的理解,以便后续做别的产品,晓得是否这个新的知识可以直接应用。

这个总分总,就像人生三个境界:"看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水。"有句诗是这么说的,愿你走出半生,归来仍是少年。

关于成长思维,我们都听过一个段子,叫如何让一个技术群吵起来,就是扔一句话, PHP 是世界上最好的语言。然后就会出现各种不服,开始狂喷,相互 Diss 。这个属于调侃,也无可厚非。但我们时刻要保持着成长思维,也就是是否对自己成长有用。

比如争论这个,没用。看到一个人写的博客,写错了一点,就开始觉得自己比他牛,这个也是没用,因为这样思考你不成长的。成长思维,就像是个好奇宝宝,时刻谦卑地吸收,学习自己的不足,用来强大自己。

能看到别人的优点,这个也是看起来很容易,实际却很难。

不抬杠,认可别人的能力,诚恳的请教,这样子的你,才能以最优的方式成长。
–完--推荐你读:

说一说赚钱

副业刚需
赚钱还是挣钱

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/351969.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

对话南科大沈平:在人工智能开源中,高校能扮演什么角色?

2021-04-20 01:47:54 作者 | 陈彩娴 采访整理 | 刘冰一 2020年被称为深度学习框架开源的元年。 那一年,继百度飞桨之后,旷视开源天元(MegEngine),华为推出MindSpore,清华大学计算机系的图形学实验室也发…

创造天赋:达·芬奇的7种天才特质

心理学家与专业魔术师迈克尔格尔博提出了“达芬奇与众不同的7种天才特质”。他阐述为好奇心、悟性、艺术和科学、关联、开阔、细致和合作精神。然而,这些特质本身并没有什么超前性,它们却使达芬奇能够从不同的角度看事物,从而能够去思考不同的…

网络安全入门必学内容

随着时代的发展,经济、社会、生产、生活越来越依赖网络。而随着万物互联的物联网技术的兴起,线上线下已经打通,虚拟世界和现实世界的边界正变得模糊。这使得来自网络空间的攻击能够穿透虚拟世界的边界,直接影响现实世界的安全。 网…

时序数据库InfluxDB快速入门使用

推荐博客: Influxdb中文文档 linux安装influxdb Influxdb安装、启动influxdb控制台、常用命令、Influx命令使用、Influx-sql使用举例、Influxdb的数据格式、Influxdb客户端工具 1.安装 1、influxdb数据库官网的下载链接: https://portal.influxdata.c…

数据分析--Numpy初级(二)

Numpy初级 Numpy数组属性Numpy的routines函数 Numpy数组属性 Numpy数组的维数成为秩(rank),即轴的数量,一维数组的秩为1…。在Numpy中,每一个线性的数组称为是一个轴(axis),也就是维…

桶装水小程序怎么做

微信送水小程序是一款基于微信平台开发的送水服务应用程序,它可以帮助用户方便快捷地订购水产品,并且提供上门配送服务。下面我们来介绍微信送水小程序的主要功能。 一、商品展示 微信送水小程序提供了丰富的水产品展示,包括矿泉水、纯净水…

小程序开发同步缓存、异步缓存

目录 一、uni.setStorage(Object) 二、uni.setStorageSync(Key, Data) 三、使用 四、uni.getStorage(OBJECT) 五、uni.getStorageInfo(OBJECT) 一、uni.setStorage(Object) 将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容&…

草图大师模型 sketchup模型下载 sketchup模型免费下载 SU模型下载

草图模型网提供最全面的SU模型资源下载,为广大sketchup设计师打造一个高精度实用SU素材库,有上万个sketchup模型,并且每天更新!让你更快的找到想要SU模型。像草图模型网,个人很少去这个网站模型较为过时,还有定鼎网、sketchup博客、3DNEW、谷歌草图模型库等等诸如此类的设计网站…

Tomcat部署

目录 Tomcat 什么是 servlet? 什么是 JSP? Tomcat 功能组件结构: Container 结构分析: Tomcat 请求过程: ---------------------Tomcat 服务部署------------------------- 1.关闭防火墙,将安装 Tomcat 所需软…

SU插件|TopoShaper生成地形 免费下载及介绍(SketchUp草图大师必备)!

TopoShaper(生成地形) —————— 插件基本描述: 这是一个生成地形的插件,常用于景观、建筑专业建模,从CAD或者其他绘图工具中制作好的等高线、高程点导入SketchUp,此插件可以快速使用线条或点云直接生…

sketchup 2018下载与安装教程

sketchup 2018下载地址: 链接:https://pan.baidu.com/s/1iH7gISr6sTJRRNFPzsIF0A 提取码:duf4 注意:安装之前应该检查电脑是不是64位的操作系统,本软件只针对64位操作系统。 安装步骤: 1.下载完成之后&am…

Enscape 出 Mac 版本了,适用于SketchUp 2021免费公测版,附下载地址

Enscape 宣布推出适用于 Mac 的 Enscape 免费公测版本,这是其流行的实时渲染和虚拟现实插件的新原生 macOS 版本,适用于建筑和 CAD 软件。新版本于上周的Envision 2021用户活动中宣布,将于 2022 年发货。跟着Renderbus瑞云渲染小编小瑞一起来…

SketchUp-2022版本

伴随着SketchUp Pro和LayOut的更新,2022年SketchUp迎来了一个新的时代,尤其是在新版本中,新增和改进了诸多的建模工具以及额外的搜索功能,以及增强了时间布局的效果,从而减少设计师们所消耗的时间以及操作流程&#xf…

STL-string-2

Iterators Capacity resize void resize (size_t n);void resize (size_t n, char c); Resize string 将字符串的大小调整为n个字符的长度。 如果n小于当前字符串长度,则当前值将缩短为其第一个n字符,删除第n个字符之后的字符。 如果n大于当前字符串长…

[操作系统]1.计算机系统概述

写在前面:这篇是为了复习基础知识准备的,而不是根据学校的教材走的,所以叙述有些出入的地方请见谅,该系列旨在快速梳理操作系统的基础知识和一些常见的问题点,知识框架来自于王道操作系统,后续有机会的话会继续补充 1.操作系统的基本概念 一个计算机系统可以自上而下分成四个…

Nginx踩坑记录(二) nginx: [warn] invalid value “TLSv1.3“ in /etc/nginx/nginx.conf:20

问题详情 (通过指定配置文件的方式)启动nginx,提示告警,nginx启动失败。 rootvultr:~# nginx -c /etc/nginx/conf/nginx.conf nginx: [warn] invalid value "TLSv1.3" in /etc/nginx/conf/conf.d/v2ray.conf:20问题原…

如何快速访问iOS设置:iPad,iPhone,iPod

原文:http://holgr.com/blog/2011/11/no-jailbreak-necessary-how-to-quickly-access-ios-settings-on-your-ipad-iphone-or-ipod/#more-2924 在苹果发布iOS 5之前,快速访问iOS设置程序的唯一方法是越狱后使用SBSettings。在iOS 5以后,苹果公…

ios12越狱自签需要联网_从越狱的iOS切换到Android? 这是你需要知道的

ios12越狱自签需要联网 There are ample comparisons of iOS and Android, but few take into account jailbreak apps and power-users. Jailbroken iOS apps make up for a lot of shortcomings, but if you’re still interested in Android, here’s what you need to know…

pythonista3没有url scheme_URL Scheme是如何实现app之间的跳转

项目演示 URL Scheme是什么 由于苹果的app都是在沙盒中,相互是不能访问数据的。但是苹果还是给出了一个可以在app之间跳转的方法:URL Scheme。简单的说,URL Scheme就是一个可以让app相互之间可以跳转的协议。每个app的URL Scheme都是不一样的…

IPAD2 5.1.1越狱后的屏幕不能自动旋转~~~

己顶,出现这问题的原因是因为越狱安装了插件的原因。问题解决了,大家没有遇到类似的问题吗?问题出在大家都装了一个SBSettings的插件,解决办法就是在这个插件的ISO 5 Notification中打开Disable Toggles 和 Separate List且在Set …