Android学习指南

目录

    • 核心分析内容
    • 1、学什么
      • 1.1、Android基础 & 常用
      • 1.2、Android进阶
      • 1.3、与时俱进、热门技术
      • 1.4、编程语言:Java与Java虚拟机
      • 1.5、计算机基础
      • 1.6、总结
    • 2、怎么学
      • 2.1、学习路径:如何循序渐进、阶段性的学习Android的理论知识?
      • 2.2、获取途径:有哪些高效的方式获取Android理论知识?
      • 2.3、学习方式:用什么方式记录?
      • 2.4、总结
    • 3、怎么应用Android知识?
      • 3.1、该如何寻找项目?
      • 3.2、如何将理论知识运用到项目中 & 提高项目的质量
    • 具体执行建议
    • 总结

核心分析内容

对于怎么学习Android,主要解决的是3个问题:学什么怎么学 & 怎么用

具体如下:
在这里插入图片描述
下面,我将带着上述几个问题,详细讲解自身学习Android的方法和Android学习路径。最后,还会结合前面内容,给出综合的具体执行学习Android的建议。

1、学什么

面向Android初、中级开发者,对于要学习的Android理论知识,我认为主要包括:

  • Android基础 & 常用
  • Android进阶
  • 与时俱进、热门技术
  • 编程语言
  • 计算机基础

具体介绍如下:

1.1、Android基础 & 常用

针对Android基础&常用知识,按照优先级最主要的知识点主要包括:四大组件布局使用多线程 & 动画

具体介绍如下:

类型简介具体内容
四大组件Android最基础、最常用的四个组件• 活动(Activity)
• 广播(Broadcast)
• 内容提供者(ContentProvider)
• 服务(Service)
布局使用常用UI布局组件• 框架布局(FrameLayout)
• 线性布局(LinearLayout)
• 绝对布局(AbsoluteLayout)
• 相对布局(RelativeLayout)
• 表格布局(TableLayout)
• 约束布局(ConstraintLayout)
多线程多线程操作、异步通信• Thread、Runnable
• Handler
• AsyncTask
• IntentService
• HandlerThread
动画实现UI中的动画效果• 补间动画
• 属性动画
• 帧动画
• 差值器 & 估值器

1.2、Android进阶

针对Android进阶知识,按照优先级最主要的知识点主要包括:自定义View性能优化

具体介绍如下:

类型简介具体内容
自定义View自定义试图组件 & 动画• 自定义View流程(measure、layout、draw)
• 时间分发机制
• 自定义动画 & 组件
性能优化性能优化的目的是为了让应用程序App更快、更稳定 & 更省电• 内存优化
• 内存泄漏
• 绘制优化
• 布局优化

1.3、与时俱进、热门技术

除了基础日常使用的Android知识,我们还需时刻关注行业动态,与时俱进的学习新技术,如近些年来较为热门的Android新兴技术包括:Flutter热修复插件化 等;

同时,了解 & 学习常用的开源库也十分重要,常用的开源库主要包括 图片加载网络请求异步处理 的开源库。

具体类型如下:

类型简介具体内容
图片加载加载显示图片• glide
• fresco
• picasso
• Android-Universal-Image-Loader
网络请求与服务器快速实现网络请求• Retrofit
• okhttp
• volley
异步处理快速实现异步通信、响应式编程• RxJava
• RxAndroid
• RxBinding
• EventBus

1.4、编程语言:Java与Java虚拟机

Android是基于Java的,所以学习Java和Java虚拟机(JVM)十分重要。

学习Java不需要类似后端那么深入,我认为作为Android开发者,学习的内容包括:语言特性基础使用集合类机制

具体介绍如下:

类型简介具体内容
语言特性Java特有的语法特性• 面向对象的3个特征与含义
• 多态的实现原理
• 基本数据类型、相关操作和封装类
• 4种引用:强、软、弱、虚 & 应用场景
基础使用Java常见的使用类/方法• 基本数据类型、相关操作和封装类
• Object类、String类、抽象类(Abstract)
• Static关键字
• 接口(Interface)
集合类Java中与集合相关的类 & 使用• Collection类、Arrays类
• List、Set、Queue、Stack、Map的特点与用法
• Vector、ArrayList、LinkedList的存储特性 & 区别
• Map相关:HashMap、LinkedHashMap、TreeMap、HashTable、ConcurrentHashMap
机制Java特定机制的使用• 多线程:Thread与Runnable、ThreadLocal、线程池ThreadPool
• 线程同步:sychronized、同步锁(sychronized)
• 反射
• JNI
• IO与NIO
• 泛型

对于Java虚拟机(JVM),属于底层 & 原理性的内容,具体介绍 & 学习的内容包括:
在这里插入图片描述

1.5、计算机基础

除了学习Android特定技术外,对于程序员来说,最基本的计算机基础素养也十分重要的,主要包括 数据结构算法计算机网络

具体介绍如下:

类型简介具体内容
数据结构相互之间存在一种或多种关系的数据元素的集合• 线性表&特殊线性表(栈和队列)
• 树、二叉树
• 串、字符串
• 图
• 查找
• 排序
算法解决特定问题的求解步骤对应每种数据结构的多种常见算法
计算机网络网络通信相关• 计算机网络体系结构(5层 & 7层)
• TCP / IP协议、UDP协议
• HTTP协议
• Socket

1.6、总结

至此,关于入门Andriod需学习的内容讲解完毕,总结如下:

在这里插入图片描述

2、怎么学

对于怎么学习Android知识,此处分为3个子问题:

  • 学习路径:如何循序渐进、阶段性的学习Android的理论知识?
  • 获取途径:有哪些高效的方式获取Android理论知识?
  • 学习方式:用什么方式记录?怎么样去记录?

下面将具体介绍:

2.1、学习路径:如何循序渐进、阶段性的学习Android的理论知识?

  • 既然已经知道要学习哪些内容了,下面,该解决的是:学习路径,即什么阶段该学习什么内容
  • 对于Android知识学习阶段,我认为是和Android开发水平相结合的,只要掌握了哪部分知识,就代表你处于Android开发的哪个阶段。
  • 我将Android开发水平分为:初、中、高 & 高级以上

具体对应的知识内容如下:

类型定义知识 & 能力范畴特点具体内容
初级最基础的Android知识• 定性认识:知识的了解
• 定量使用:知识的实际使用
• 基础
• 广度
• Android基础使用(如四大组件)
• Android常见机制(如多线程、动画等)
• Java
• 编程通用:数据结构、算法、网络
中级基础学习中更深一步的探索• 高级应用
• 源码分析
• 新技术的使用
• 深度
• 与时俱进
• 底层工作机制的原理
• 自定义View
• 性能优化
• 热定技术:开源库、热修复、插件化
高级专注于某一垂直领域(如音视频、性能优化)特定领域的知识深入• 某一垂直领域
• 机具深度 & 门槛
专注解决特定领域的技术问题
高级以上技术专家继续深入研究特定领域更加深入某一垂直领域• 专注解决特定领域的技术问题
• 会产出 & 开源库 & 组件
高级以上架构师在更高的层面解决项目难点 / 业务问题专注于整体技术架构• 技术架构设计
• 具体业务的解决方案
高级以上管理层面向团队、业务 & 产品具备管理团队、统筹产品方向的属性• 管理能力
• 业务能力
• 产品能力

2.2、获取途径:有哪些高效的方式获取Android理论知识?

既然已经知道要学习哪些内容了,下面,我将列举一些学习这些理论知识的有效途径。

对于获取Android知识,我认为最有效的途径是:书籍 > 视频 > 技术博客 > 公众号

具体介绍如下:

类型特点应用场景推荐
书籍具备完整知识体系、讲解全面的获取知识途径成知识体系、循序渐进的学习• Android:《第二行代码》、《Android开发艺术探索》
• Java:《Java编程思想》
• JVM:《深入理解Java虚拟机》
• 数据结构:《大话数据结构》
• 算法:《剑指Offer》、Leetcode网站刷题
• 计算机网络:《计算机网络》(第五版)
视频• 更加生动、清晰的讲解知识 & 实践
• 较大的缺点:耗费时间较长
学习难度较高的知识在线学习网站对应的Android学习课程(极客学院 & 慕课网)
技术博客针对某个知识点进行讲解目的性搜索、深入学习• 技术社区:CSDN、稀土掘金、简书
公众号针对某个知识点进行讲解(由于镶嵌在微信,所以容易链接到外部更多的渠道)适合碎片化学习Android公众号

关于通过公众号的学习,本人的微信公众号:carson带你解析Android,希望能让大家系统的学习上述说的Android理论知识。

2.3、学习方式:用什么方式记录?

很多人看完书籍看完博客后当时很理解,但过一段时间就十分容易忘记。

所谓“好记性不如烂笔头”,我认为,最好的记录方式就是将学习到的知识记录下来,我强烈推荐:撰写技术博客。

对于技术博客的介绍如下:
在这里插入图片描述
撰写技术博客好处多多,主要包括:

好处具体描述
提高开发效率• 复杂使用的流程化:记录下繁杂的使用流程,下次再次使用时按部就班直接复用即可,常见的有:开源库的使用、某类需求的具体实现过程
• Bug的快速解决:记录下问题发生的场景 & 解决方案,不仅能避免重复采坑,就算采坑了也能快速解决
保证真正的掌握知识• 只有做到以下3步我才认为是真正掌握了知识:敲代码实现、清晰表达 & 让别人听懂
• 但大部分开发者都停留在第一步(敲代码实现),你得清楚明白:敲代码实现 & 用语言表达出来是两码事
• 所以在整个过程中是非常能锻炼自己的思维能力 & 表达能力
加深对知识的思考• 在写作过程中,你会不断思考知识的各个方面
为什么?因为如果思考的广度 & 深度不够,文章是没法继续写下去的
• 这大概也是很多人没法坚持下来的原因:因为牵一发而动全身,知识总是从1个点扩散到整个面的,最终需完成的文章内容远远超出你的想象
保证知识的正确性• 自己的认知能力有限,所以对知识的理解总有偏差
• 当分享出来博客后,良好的Android技术社区氛围能及时纠正你错误的理解,保证你的认知是正确的

当然,还有一些其他福利,如:

好处具体描述
提供影响力当大量产出优质文章后,在Android领域的知名度 & 影响力就会提高、对自己在职场上的地位会有所帮助,这是一种莫大的荣誉感
结识人脉相对其他职业来说,程序猿较为封闭,即对电脑多、面向人较少;通过博客、Github等这些公开渠道,能结识更多的开发者
知识共享Android与IOS其中一个较大区别 = 开源,作为一名Android开发者,应秉着谷歌、Android开源的精神,将有用的知识分享给大家、帮助更多的Android开发者 & 共同学习,推进整个Android技术圈的进步

2.4、总结

在这里插入图片描述

3、怎么应用Android知识?

  • 理论结合实践、学以致用才能更好地获取知识,对于深入理解Android,最好的实践就是 将理论知识运用到Android项目中
  • 所以,此处可以转化成两个问题:
    • 该如何寻找项目?
    • 如何将理论知识运用到项目中 & 提高项目的质量

下面我将详细回答这两个问题

3.1、该如何寻找项目?

此处我给出3个方向:

  • 学校:课程设计、社团组织
  • 公司:实习、正职、创业
  • 技术社区:开源项目
方向具体
学校• 课程设计:请认真对待大学专业对于你职业相关课程的大作业(如Java、Android、数据结构),因为它可能会成为你一个不可多得的项目经验
• 社团组织:多参与校内官方组织 & 社团组织,注重寻找具备校内影响力较大的产品的所属组织,因为在那里你能找到一个具备落地实践的开发经历 & 一群靠谱、能在职场上给予你很多帮助的开发团队
公司• 实习:如果你还是在校大学生,请安排好自己的大学上课时间,尝试出去公司参与拥有大量用户、真正的项目,特别是知名公司,对于在校大学生来说,这部分项目经历是含金量的提高。
• 正职:如果你已经是正职员工,那么做好手头上的项目是你实践最好的方式。
• 创业:这是能最大程度锻炼你全方面的能力,含:技术专业能力 & 基础能力;但这是一个可遇不可求的机会:找到靠谱的团队 & 有前景的方向,若有这样的机会,个人非常建议去尝试;假设最后能拿到投资,含金量是非常非常高、最能锻炼人的。
技术社区• 来源:自己的项目、当前技术热点/开源库、仿照主流的app;
• 内容:完整App、某个功能模块、UI组件等;
• 开源处:主流技术社区 = Github、CSDN、稀土掘金、简书

3.2、如何将理论知识运用到项目中 & 提高项目的质量

我认为,**项目中的所有功能 & 业务实现都是基于上述说的Android知识的,关键是在于:**是否能选择对的知识点 & 组合实现思路。

提高项目质量,即提高项目含金量、增加技术含量 & 亮点,下面主要是从项目**本身的意义实现方式性能优化** & 影响力 4个方面

类型具体备注
意义尽可能的让自己的项目使用的技术往学习到的知识点靠拢
实现方式• 具备一定的技术难点 & 技术技巧,而不是简单实现
• 如:使用了某种新技术、新的开源库
若无难点,要学会自己去制造难点
性能优化对项目在性能上提出要求 & 提出解决方案与同类项目、一般要求的区别开来
影响力尽可能让项目可落地 & 具备一定的用户基数;
• 具备一定的影响力 & 知名度

具体执行建议

个人认为最高效的执行方式是:以做项目为主知识体系学习为辅将技术博客作为一种学习的方式

具体理解的是:
在这里插入图片描述

总结

至此,关于我对Android学习内容、方向 & 具体实践方式 讲解到这里,此处作个简单总结:
在这里插入图片描述
凭借这样的学习方式,有幸获得腾讯、阿里巴巴、今日头条等Android客户端offer,所以,我将自己的一套Android学习方式总结出来分享给大家,希望各位也能获得心仪的offer!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

概率论 事件关系 古典概型与几何概型

基本知识点 随机试验:1.不确定性2.可预知性3.可重复性基本事件:包含一个样本点 必然事件:全集 不可能事件:空集 子集2^n-1-1(减去空集与真集) 事件间的关系 1.包含关系 2.和运算AUBAB,A与B至少有一个发生 3.积事件A∩BAB,AB同时发生 4.差事件A-BAB ̅A-AB,A发生但B不发生 5.…

Android代码命名规范

目录目录1、为什么 规范 Android 代码命名?2、Android需要命名的代码(对象)有哪些?3、具体命名规范3.1、包3.2、类3.3、变量3.4、方法3.5、参数名3.6、资源3.6.1、布局文件资源3.6.2、图片资源3.6.3、参数值资源3.6.4、动画资源3.…

Idea中搭建Resin运行环境(Mac)

一、背景 idea中搭建Resin运行环境,可以在idea中通过点击Run按钮直接调试应用。 二、Resin下载地址 下载地址:https://caucho.com/products/resin/download/gpl#download 我下载的是tar.gz的,通过tar -zxvf命令解压到自己mac的任意目录下…

Java牛客专项练习2020.12.10

TreeSet subset()方法: subset(from,true,to,true),返回从from元素到to元素的一个集合,true判断是否包含边境元素 Java与C Java与C都有三个特征: 封装,继承,多态 抽象类与接口 1.抽象类可以有构造方法,但不能new;接口没有构造方法 2.抽象类中可以有普通成员变量int x等,接…

Idea中搭建Wildfly(JBoss)运行环境(Mac)

目录一、简介二、下载Wildfly(JBoss)三、配置Idea四、调试一、简介 首先说一下在linux环境,只需要将war包上传到 wildfly-8.2.0.Final/standalone/deployments 目录,然后到 wildfly-8.2.0.Final/bin 目录下 ./standalone.sh&…

一个简单JavaAgent的实现

一、什么是javaagent javaagent是一个JVM“插件”,一种专门精心制作的.jar文件,它能够利用JVM提供的Instrumentation API。 1.1、概要 Java Agent由三部分组成:代理类、代理类元信息和JVM加载.jar和代理的机制,整体内容如下图所…

Openai的openai新版本调用方式

最近大家有没有发现Openai的openai已经更新到1.6.1了,而且API的调用方式发生了巨大的变化,下面来看看openai新的调用方式吧。 欢迎关注公众号 module ‘openai’ has no attribute ChatCompletion. 提示openai的版本过低。(pip install -U openai) 1. Chat API from openai…

计算机系统基础 计算机系统的基本组成与基本功能

基础知识点 1.1946年第一台通用电子计算机ENIAC诞生 2.冯.诺依曼结构: 组成:输入设备,输出设备,存储器,运算器,控制器 3.现代计算机结构模型: 组成 CPU中央处理器 PC程序计数器 IR指令寄存器 ALU算数逻辑部件 GPRs通用寄存器组 MAR存储器地址寄存器 MDR存储器数据寄存器 知…

Android UI卡顿监控

一、背景 应用的使用流畅度,是衡量用户体验的重要标准之一。Android 由于机型配置和系统的不同,项目复杂App场景丰富,代码多人参与迭代历史较久,代码可能会存在很多UI线程耗时的操作,实际测试时候也会偶尔发现某些业务…

物理 质点运动学

常用公式 重点 1.求轨道方程:消去时间t 2.dr---->位置矢量大小的增量 3.求方向:tanax/y 4.求位置也就是求位移rxiyj即可 习题解析 1.求运动时一定要求出加速度,变速与匀速就是看a 2.求位移时必须看X0是不是为0,如果不为0,求位移与路程时都要减去x0 3. 记住等号两边统一…

使用CLion的时候,对于cmake的使用

问题概述 使用CLion的时候,一个大的项目会有一个总的CMakeLists.txt,这个是控制整个项目的编译环境,但是针对测试的代码会有自己的单独的CMakeLists.txt,这个单独的cmake文件是控制自己的程序所需要的环境即使是编译单独的测试程…

Android NDK之静态/动态注册Native方法

一、简介 关于NDK有两种方法注册:静态注册和动态注册。 静态注册: 就是直接在Java文件里写个native方法 然后再c/c文件中实现这个方法就行了;动态注册: 就是为了不要写很长的方法名,用JNI_OnLoad方法实现预注册&…

概率论 条件概率 全概率 贝叶斯公式

常用知识点 条件概率 1.P(B|A)1表示A发生的情况下B必然发生 A属于B 2.可列可加性 P(BUC|A)P(B|A)P(C|A) 3.P(B|A)的样本空间为A,A与B都发生了 大题解答思路 1.首先设取出一件商品为次品为事件A 2.写B1:甲生产,B2:乙生产 PB1…PB2… P(A|B1)…P(A|B2)… 3.写PAPB1*P(A|B1)……

C语言学习:%d、2d、02d、.2d的区别

%d:为普通的输出。 %2d:按宽度为2输出,右对齐方式输出。若不够两位,左边补空格。 %02d:同样宽度为2,右对齐方式。位数不够,左边补0。 %.2d:从执行效果来看,与%02d一样…

计算机系统基础 数据的表示和存储

数制和编码 1.信息的二进制编码 2.进制转换必须要知道: 1)使用哪一个进制(二,八…) 2)定点数还是浮点数(关于小数点的问题) 3)编码问题----原码,补码,反码,移码 3.进制转换 1)R进制转十进制(按权展开) ----R进制 ----八进制与十六进制 ----R转换为十进制 2)十进制转换为R…

物理 常见力与牛顿三定律

常用知识点 动量 dmvdmvdvm p-mv- f-dp-/dtma- 开普勒第三定律 r1^3__k只与恒星质量有关 T^2 总结 1.电梯匀速就相当于在地面,加速或减速就会有一个a 2.当合外力为0时,物体保持静止或匀速直线运动 3.力是改变物体运动状态的原因 4.重力在地球两极最大,赤道最小,随纬度…

Java命令:jmap — 打印指定进程的共享对象内存映射或堆内存细节

文章目录一、前言二、命令介绍三、使用实例1、jmap -heap [pid]2、jmap -histo[:live] [pid]3、jmap -histo[:live] [pid] |grep "[关键字1]\|[关键字2]"4、jmap -dump:live,formatb,filea.log [pid]四、总结一、前言 jdk安装后会自带一些小工具,jmap命令…

概率论 一维随机变量

随机变量 离散型随机变量:有限个或无限可列个 连续型随机变量 分布函数F(X) 范围是[a,b) 包含能取到a以及a之前的值的概率相加 分布律(概率分布) 1.所有概率相加为1 2.WX-1,计算出每一个对应的W,然后如果有相同的W就合并其概率,最后一一对应P(x)即可 概率密度函数(密度) …

JAVA牛客专项练习2020.12.31

1.使用迭代器的remove方法,可以边遍历边删除元素 2.线程 启动线程 new thread().start() new thread(new runnable()).start() 普通方法&#xf…