我对Android的理解_singwhatiwanna的博客-程序员秘密

技术标签: 综合  android  源码学习  学习路线  

前言

写这篇文章是为了和大家描述下我对Android的理解,同时会讲述下我后面的技术规划,希望能够对大家有点参考价值。大家都想学好Android,那么怎么才能学好呢?这个真不好说,但是我可以和大家交流下我自己的心得,当然仅限应用层开发,因为我本身是侧重应用层开发的。

知识的分类

Android中有很多知识点,虽然说大部分知识点都不难,但是量很多,这就会给人一种很琐碎的感觉。在这种情况下就要对知识进行分类,我对Android知识的分类为:
1. 基本知识点
比如四大组件如何使用、如何创建Service、如何进行布局等。这类知识是需要熟练掌握的。
2. 稍微深入的知识点
比如AIDL、Binder、多进程、View的绘制流程、事件分发、消息队列等。这类知识对于高级开发者来说也是必须掌握的。
3. 基本知识点的细节
比如Activity的启动模式和标记位、Service同时处于start和bind状态时的停止问题、AsyncTask的同步异步问题以及使用时的限制等,这种问题还有很多。这类知识点,大家在开发过程中可以并不会去注意,这会导致一个问题,那就是开发应用没问题,但是在面试时面试官只要稍微问下细节或者特殊情况,就hold不住了。
4. 系统核心机制
比如主线程的消息循环、主线程如何和AMS如何跨进程交互、SystemServer进程中的各种Service的工作方式。这类知识对于高级开发者也是建议掌握的,因为它们可以让开发者理解Android的运行体系。
5. 琐碎的知识点
此类知识点我把它们定义为一些重要但是没有什么技术难度的问题,比如如何打开一个网页、如何打电话、如何发短信、如何定位、多点触控等,这类问题往往不好记忆,但是需要的时候去查一下就能立马搞定。

类别 描述 开发者所需级别
基本知识点 熟练掌握 初中级
深入知识点 熟练掌握 中高级
基本知识点的细节 掌握 高级
系统核心机制 熟悉、掌握 高级、资深
琐碎的知识点 了解 所有级别

如何学习

关于Android知识点的学习,无非就是看书、看官方文档,写代码等,这个是需要投入时间的。大家比较容易困惑的就是看Android源码,觉得“看不懂”,这是可以理解的。看源码的时候我们要侧重对流程的把握,刚开始时不要纠结太多的代码细节。有时候一遍看不懂的话就多看几遍,这样慢慢的就有眼熟了,眼熟后就能看懂了。另外看源码要讲究切入点,源码那么多从哪里开始下手呢?其实我建议先找一些自己感兴趣的切入点,比如大家有没有想过“Activity启动时,Activity的对象时在什么时候创建的?”这个问题,因为Java时面向对象的语言,所以Activity必须要创建一个对象,带着这个疑问去分析,一步步揭开谜团也是很有意思的事情。针对上面这个问题如何去分析Activity的对象到底是何时创建的呢,其实很简单,沿着Context的startActivity方法跟下去就好。采用这种方式去看源码,当看了一些主题后就会有一种贯穿的感觉,而这种感觉其实就是知识体系,这个知识体系是建立在Android的整体之上的。但是,不建议大家上去就看C层的源码,可等对源码有一定理解后再去看。关于琐碎的知识点,建议大家不好花费太多时间在上面,没有太大意义。

要知其所以然

在学习过程中,我们还要有质疑的精神。很多知识点我们掌握了,但是为什么是这样的,这个问题可能很多人并没有去想过。比如RemoteViews只支持有限的系统View,但是为什么呢?有没有想过?如果大家去想这个问题,那么就可以更好地理解RemoteViews的本质。再比如AsyncTask要求第一次访问这个类必须在UI线程,这一点我想大家都知道,但是为什么必须这样的?如果第一次访问AsyncTask在子线程会怎么样呢?带着这些疑问去思考去探索,那么你的技术档次就会更上一层楼。

我的技术规划

就我目前来说,我还有很多东西不太会,不管是Android还是其他技术。对于Android来说,源码我还需要更深入地看下去,同时我还需要去进一步学习Linux shell脚本以及Linux的内部实现,这样可以进一步地理解Android的实现,IOS我也需要稍微了解下,这样能够扩宽我的知识面,毕竟IOS也属于移动开发,但是我不会发很多精力去研究IOS,事实证明,“什么都擅长就等于什么都不擅长”,一个人要成为全栈工程师真的非常非常难,而且国内的招聘很多不需要全栈工程师,而且所谓的全栈工程师很可能在面试中就被淘汰(由于深度不够的原因)。我还会学习一些编译环境的搭建,比如Gradle、Gerrit等。按照这种规划去学习,我在Android就会达到一定深度并且有了Linux内核知识的支撑,然后了解IOS开发,同时还能搭建环境啥的,至于C、C++、Web开发之类的知识点,我在学校时就有初步的了解,这样一来,知识的广度和深度我都有,我认为应该是不错的规划。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/singwhatiwanna/article/details/46810527

智能推荐

关于dirent API中基本函数的使用--载入数据篇_dirent库_Vector0805的博客-程序员秘密

简介 dirent库其实是C语言的标准库,但是正如C++继承了C语言的许多标准库,所以在按照之前的博客配置好dirent后便可以在C++语言中使用。本文仅仅介绍dirent API中载入目录内容的三个函数,分别是:opendir():用于载入目录,返回一个DIR * 类型的对象,用于指向目录。参数类型是const char*。readdir():用于读取目录中的文件,返回的是一个dirent

手机连电脑热点,电脑连手机热点的ip分配问题_夏河桥逆游的鱼的博客-程序员秘密

电脑连手机热点:手机下行端口                           手机上行端口                                              电脑无线网卡(下行)22.104.174.178/32                19.168.43.1/24                                          浏览器查询:22...

v-echart中环形图中间添加文字_echart 环形图中间文字_陌上烟雨寒的博客-程序员秘密

这里我将一个环形图做成了一个组件需要父组件传入要显示的数据 和 环形图中间的文字有时候环形图中间的文字一直没有办法显示需要注意需要将v-echarts全部引入,部分引入时会有问题,暂时不知道如何解决,就全部引入了考虑v-echart异步加载问题,在数据加载完成之后再去渲染组件,推荐使用v-if控制子组件的显示,数据加载完成之后再进行显示。<template> <div> <ve-ring :data="chartData" :

Android 代码模拟物理按键的几种方式_sendkeydownupsync_Ang_qq_252390816的博客-程序员秘密

一,通过AccessibilityService实现简介AccessibilityService其实是一个Servic,使其子类;设计AccessibilityService的初衷在于帮助残障用户使用android设备和应用,在后台运行,可以监听用户界面的一些状态转换,例如页面切换、焦点改变、通知、Toast,自动安装APP等模拟操作(你能做的他都能),辅助用户操作、发音(本意是这样的)等,并在触发AccessibilityEvents时由系统接收回调。后来被开发者另辟蹊径,用于一些插件开发,比如微

第15讲 布尔函数标准型及化简_L.Bubu的博客-程序员秘密

布尔函数标准型及化简1.逻辑函数及其标准型2.电路优化2.1成本标准2.2成本与速度的矛盾2.3与或式(或与式)的门输入成本2.4代数法优化电路表达式3.门的传播延迟3.1延迟模型3.2时间测量3.3冒险(冲突)现象1.逻辑函数及其标准型●n变量的逻辑函数共有2(2n)个。●最小项:只在一种情况下取值为1的逻辑函数。●最大项:只在一种情况下取值为0的逻辑函数。●最小项与最大项的关系:互反(M = ¬m)●逻辑函数表示形式:(以真值表为下图的逻辑函数为例)1).最小项列表:F(X, Y,

LintCode(easy)最长上升连续子序列_Jang1996的博客-程序员秘密

给定一个整数数组(下标从 0 到 n-1, n 表示整个数组的规模),请找出该数组中的最长上升连续子序列。(最长上升连续子序列可以定义为从右到左或从左到右的序列。)注意事项time您在真实的面试中是否遇到过这个题? Yes 样例 给定 [5, 4, 2, 1, 3], 其最长上升连续子序列(LICS)为 [5, 4, 2, 1], 返回 4.给定 [5, 1, 2, 3, 4], 其最长上升连续

随便推点

Aptana插件安装以及配置_瞎转呦的博客-程序员秘密

1. Aptana插件安装 1.1. Aptana插件简介   Aptana是一个非常强大,开源,JavaScript-focused的AJAX开发IDE。 它的特点包括:  JavaScript,HTML,CSS语言的Code Assist功能。   Outliner(大纲):显示JavaScript,HTML和CSS的代码结构。  支持各种js框架   j

BurpSuite安装和基础使用教程(已破解)_救救直男吧!的博客-程序员秘密

Burp Suite 是用于攻击web 应用程序的集成平台。它包含了许多Burp工具,这些不同的burp工具通过协同工作,有效的分享信息,支持以某种工具中的信息为基础供另一种工具使用的方式发起攻击。它主要用来做安全性渗透测试,可以实现拦截请求、Burp Spider爬虫、漏洞扫描(付费)等类似Fiddler和Postman但比其更强大的功能。那么我们开始安装教程Burp Suite如何安装Burp Suite是由Java语言编写而成,而Java自身的跨平台性,使得软件的学习和使用更加方便

ekho 语音合成开源_ekho 生成mp3_xiaocao9903的博客-程序员秘密

1.ekho 介绍:http://www.eguidedog.net/cn/ekho_cn.php​​2.安装以及依赖包安装​2.1 依赖包安装 yum install -y ncurses-devel libsndfile-devel espeak-devel pulseaudio-libs-devel ​2.2 ekho 安装tar xJvf e

造血干细胞最新进展(2021年1月版)_“泽平科技”公众号24h在线答疑的博客-程序员秘密

推荐阅读:《造血干细胞扩增、转染以及基因编辑优化解决方案》本文中,小编整理了近年来科学家们发表的多篇重要研究成果,共同聚焦他们在造血干细胞研究领域取得的新成果,与大家一起学习!图片来源:Blood, 2020, doi:10.1182/blood.2020007172【1】Blood:重大进展!成红血细胞产生的FGF23促进造血干细胞动员doi:10.1182/blood.2020007172到目前为止,作为调节全身磷酸盐浓度的激素,成纤维细胞生长因子23(FGF23)在肾脏中发

基础知识2:PCL中pcl::PointCloud::Ptr 和Pcl::PointCloud两个类的相互转换_Abel_Liu_的博客-程序员秘密

1:Ptr类型和非Ptr类型相互转换pcl::PointCloud<pcl::PointXYZ>::Ptr cloud_Ptr(new pcl::PointCloud<pcl::PointXYZ>);pcl::PointCloud<pcl::PointXYZ> cloud;cloud=*cloud_Ptr;cloud_Ptr=cloud.makeShare...

Android 之横向进度条演示_曾淘的博客-程序员秘密

进度条:相信大家也都明白,有了进度条,那么给用户就不会造成,长时间的等待而觉得自己的程序挂掉了,所以,这个小demo还是可一看看的,那么接下来,然我们来看看到底是如何实现的。1.效果图:2.布局说明:1.textview显示进度条2.ProgressBar进度条3.进度条配置:         android:id="@+id/pb"

推荐文章

热门文章

相关标签