一转眼工作也有几年的时间了,一直想沉下心来,再回过头来重新系统的学习一遍 Android。所以就有了这个读书笔记。俗话说温故而知新,下面就请大家再跟着我系统的学习一篇 Android 吧!

这一系列主要参考 Android 入门经典----《第一行代码》

默认学习者会简单的 Java 语法!Android 方面完全从零开始!跟着我系统的学习吧!

认识 Android

2003 年 10 月,Andy Rubin 等人一起创办了 Android 公司。2005 年 8 月 Google 收购了这家公司。

1.1 了解 Android 全貌

Android 从面试以来到现在已经发布了二十多个版本了。在这几年的发展过程中。谷歌为 Android 王国建立了一个完整的生态系统。手机厂商、开发者、用户之间相互依存,共同推进着 Android 的蓬勃发展。

从开发者角度,去了解这个操作系统。

1.1.1 Android 系统架构

为了让你能够更好的理解 Android 系统是如何工作的,我们先来看一下它的系统架构。大致可分四层架构:Linux 内核层、系统运行库层、应用框架层、应用层。

1.Linux 内核层

Android 系统是基于 Linux 内核的,这一层为 Android 设备的各种硬件提供了底层的驱动,比如:显示驱动、音频驱动、照相机驱动、蓝牙驱动、WiFi 驱动、电源管理等。

主要是一些底层驱动

2.系统运行库层

这一层通过一些 C/C++ 库来为 Android 系统提供了主要的特征支持。如 SQLite 库提供了数据库的支持、OpenGL|ES 库提供了 3D绘图支持,Webkit 库提供了浏览器内核的支持等。

同样这一层还有 Android 运行时库。主要提供了一些核心库,能够使开发者使用 Java 语言来编写 Android 应用。Android 运行时库还包含了 Dalvik 虚拟机(5.0 系统之后改为了 ART 运行环境),它使得每一个 Android 应用都可以运行在独立的进程中,并且拥有一个自己的 Dalvik 虚拟机示例。相比 Java 虚拟机。Dalvik 虚拟机是专门为移动设备定制的,针对手机内存、CPU 性能有限等情况作了优化处理。

一些通过 C/C++ 编写的库,还有支持我们使用 Java 开发的核心库和进程运行的虚拟机

3.应用框架层

主要提供了构建应用程序时用到的各种 API,Android 自带的一些核心应用就是使用这些 API 完成的,开发者也可以使用这些 API 来构建我们自己的应用程序。

4.应用层

所有安装在手机上的应用程序就是属于这一层了。

最新架构

  • Linux 内核

    Android 平台的基础是 Linux 内核。例如,Android Runtime 需要依靠 Linux 内核来执行底层功能,例如线程和底层内存管理

    使用 Linux 内核可以让 Android 利用主要安全功能,并且允许设备制造商为著名的内核开发硬件驱动程序。

  • 硬件抽象层(HAL)

    提供标准界面,向更高级别的 Java API 框架显示设备硬件功能。HAL 包含多个库模块,其中每个模块都为特定类型的硬件组件实现一个界面。例如相机或蓝牙模块。当框架 API 要求访问硬件时,Android 系统为该硬件组件加载库模块。

  • Android Runtime

    对于运行 Android 5.0 或者更高设备,每个应用都在其自己的进程中运行,并且有自己的 Android Runtime 示例。ART 编写为通过执行 DEX 文件在低内存设备上运行的多个虚拟机。DEX 文件是一种专门为 Android 设计的字节码格式,经过优化,使用内存很少。编译工具链(例如 Jack)将 Java 源代码编译为 DEX 字节码,使其可以在 Android 平台上运行。

    ART 的部分主要功能:

    • 预先(AOT)和即时(JIT)编译

    • 优化垃圾回收(GC)

    • 更好的调试支持,包括专用采样分析器、详细的诊断异常、崩溃报告

    还包含了一套核心运行时库,可提供 Java API 框架使用的 Java 编程语言大部分功能。

  • 原生 C/C++ 库

    许多核心 Android 系统组件和服务(例如 ART 和 HAL)是构建自原生代码的,需要用 C 和 C++ 编写的原生库。Android 平台提供 Java 框架 API 来向应用显示其中的部分原始库的功能。例如:通过 Android 框架 的 Java OpenGL API 访问 OpenGL ES,以支持应用中绘制和操作 2D 和 3D图形。

    如果开发的是需要 C 或 C++ 代码的应用,可以使用 Android NDK 直接从原生代码访问某些原生平台库

  • Java API 框架

    您可通过以 Java 语言编写的 API 使用 Android OS 的整个功能集。这些 API 形成创建 Android 应用所需的构建块,它们可简化核心模块化系统组件和服务的重复使用,包括以下组件和服务:

    • 丰富、可扩展的视图系统,可用以构建应用的 UI,包括列表、网格、文本框、按钮甚至可嵌入的网络浏览器

    • 资源管理器,用于访问非代码资源,例如本地化的字符串、图形和布局文件

    • 通知管理器,可让所有应用在状态栏中显示自定义提醒

    • Activity 管理器,用于管理应用的生命周期,提供常见的导航返回栈

    • 内容提供程序,可让应用访问其他应用(例如“联系人”应用)中的数据或者共享其自己的数据

    开发者可以完全访问 Android 系统应用使用的框架 API

  • 系统应用

1.1.2 Android 已发布的版本

2008 年 9 月,Google 正式发布了 Android 1.0 系统。

2011 年 2 月,发布了 Android 3.0 系统,专门为平板电脑设计的,比较失败。

2011 年 10 月 Android 4.0 ,这个版本不再对手机和平板进行差异化区分。

2014 年 Google I/O 大会上,推出了改动最大的 Android 5.0 系统。使用 ART 运行环境代替了 Dalvik 虚拟机,大大提升了应用的运行速度,提出了 Material Design 概念。还推出了 Android Wear、Android Auto、Android TV 系统。从而进军可穿戴设备、汽车、电视等领域。

2015 年 Google I/O 大会,推出 6.0 加入运行时权限功能。

2016 年 Google I/O 大会上推出 7.0 系统 ,加入多窗口模式

1.1.3 Android 应用开发特色

1. 四大组件

Activity、Server、Broadcast Receiver、Content Provider

Activity:应用程序的门面。

Server:默默的在后头运行

Broadcast Receiver 运行你的应用接受来自各处的广播消息,比如:电话、短信等,同样我们的应用也可以向外部发送广播消息。

Content Provider 应用程序之间共享数据提供了可能。比如读取系统电话簿中的联系人。

2. 丰富的系统控件

系统提供了丰富的系统控件,使我们轻松的编写漂亮的界面。当然我们也可以自己定义控件。

3. SQLite 数据库

系统自带了轻量级、运算速度快的嵌入式关系型数据库,支持标准的 SQL 语句,还可以通过 Android 封装好的 API 进行操作。

4. 强大的多媒体

提供了丰富的多媒体服务。如:音乐、视频、录音、拍照、闹铃。等等,这一切我们都可以在程序中通过代码来进行控制。

5. 地理位置定位

使用内置的 GPS 就可以定位到自己的位置

持续更新......

从0系统学 Android--1.1认识 Android的更多相关文章

  1. 从0系统学Android-2.5更多隐式Intent用法

    本系列文章,参考<第一行代码>,作为个人笔记 更多内容:更多精品文章分类 从0系统学Android-2.5更多隐式Intent用法 上一节中我们学习了通过隐式 Intent 来启动 Act ...

  2. 从0系统学Android--4.1探究碎片

    从0系统学Android--4.1探究碎片 本系列文章目录:更多精品文章分类 本系列持续更新中.... 初级阶段内容参考<第一行代码> 第四章:手机平板要兼顾--探究碎片 平板电脑和手机最 ...

  3. 从0系统学Android--3.7 聊天界面编写

    从0系统学Android--3.7 聊天界面编写 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.7 编写界面的最佳实践 前面学习了那么多 UI 开发的知识,下面来进行实践,做一个美观 ...

  4. 从0系统学Android--3.6 RecyclerView

    从0系统学Android--更强大的滚动控件---RecyclerView 本系列文章目录:更多精品文章分类 本系列持续更新中.... 参考<第一行代码> 首先说明一点昨天发了一篇关于 L ...

  5. 从0系统学Android--3.5 最常用和最难用的控件---ListView

    从0系统学Android-- 3.5 最常用和最难用的控件---ListView 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.5 最常用和最难用的控件---ListView Lis ...

  6. 从0系统学Android--3.2四种基本布局

    从0系统学Android--3.2四种基本布局 本系列文章目录:更多精品文章分类 本系列持续更新中.... 3.3 系统控件不够用?创建自定义控件 上一节我们学习了 Android 中的一些常用的控件 ...

  7. 从0系统学Android--3.1编写UI界面

    从0系统学Android--3.1编写UI界面 本系列文章目录:更多精品文章分类 本系列持续更新中.... 界面设计和功能开发同样重要,界面美观的应用程序不仅可以大大增加用户粘性,还能帮我们吸引到更多 ...

  8. 从0系统学Android--2.6 Activity 的最佳实践

    从0系统学Android--2.6 Activity 的最佳实践 本系列文章目录:更多精品文章分类 本系列持续更新中.... 实践中的技巧 2.6.1 知晓当前是在哪个 Activity 这个其实很简 ...

  9. 从0系统学Android--5.2 发送广播

    从0系统学Android--52 发送广播 本系列文章目录:更多精品文章分类 本系列持续更新中.... 初级阶段内容参考<第一行代码> 5.3 发送自定义广播 前面已经学习了如何接受广播了 ...

  10. 从0系统学Android--1.3创建你的第一个 Android 项目

    1.3 创建你的第一个 Android 项目 环境搭建完成后,我们就可以写下我们的第一个项目了. 1.3.1 创建 HelloWorld 项目 在 Android Studio 的欢迎页面点击 Sta ...

随机推荐

  1. mesos-slave启动不起来

    刚开始时候的状态 后来装了docker后

  2. JavaScript的概念,引入,基本数据类型

    08.05自我总结 JavaScript 一.概念 JavaScript(下文我们会用简称JS来代替)是脚本编程语言,JS语言开发的文件是以.js为后缀,通过在html文件中引入该js文件来控制htm ...

  3. 选择企业架构实践公开课的指导?TOGAF+ArchiMate+BangEA,EA工作者必学一门公开课

    我发现身边越来越多人谈数字化.谈企业架构,但是感觉谈的总是IT?知道好像不对,但是又好像也无法告诉别人这和传统的IT架构有什么不一样?网上找资料,看了很多也摸不到门路,也不知道别人讲的对不对.对了还好 ...

  4. JS基础语法---(数据)简单类型和复杂类型

    原始数据类型: number, string, boolean, undefined, null, object 基本类型(简单类型), 即值类型: number, string, boolean 复 ...

  5. 基于C# 调用百度AI 人脸识别

    一.设置 登录百度云控制台,添加应用-添加人脸识别,查找,对比等. 记住API Key和Secret Key 二.创建Demo程序 1.使用Nuget安装 Baidu.AI 和 Newtonsoft. ...

  6. python进程池和进程锁

    1.进程锁:from multiprocessing import Process, Lock def f(l, i): l.acquire() print('hello world', i) l.r ...

  7. Sublime Text 3如何关闭自动更新

    1.Preferences -> Settings-User 2.插入下面代码:"update_check": false 如果有其他的设置,用逗号隔开,然后保存 3.Pre ...

  8. Re-DD-androideasy

    题目地址 https://dn.jarvisoj.com/challengefiles/DDCTF-Easy.apk.64812266499cc050ac23e190e53b87f7 用JEB打开 返 ...

  9. SP1716 GSS3 - Can you answer these queries III 线段树

    问题描述 [LG-SP1716](https://www.luogu.org/problem/SP1716] 题解 GSS 系列的第三题,在第一题的基础上带单点修改. 第一题题解传送门 在第一题的基础 ...

  10. CF582E Boolean Function(DP,状态压缩,FMT)

    简单题. 我第二道自己做出来的 2900 没毛病,我没切过 2800 的题 lqy:"CF 评分 2800 是中等难度" 我活个啥劲啊 为了方便(同时压缩状态个数),先建出表达式树 ...