一转眼工作也有几年的时间了,一直想沉下心来,再回过头来重新系统的学习一遍 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. 数据显示按规格向datatable中增加空白记录

    /// <summary> /// 按前台分页样式为datatable增加空行 /// </summary> /// <param name="gridPage ...

  2. ASP.NET MVC Action向视图传值之匿名类型

    在使用ASP.NET MVC过程中想必大家都有遇到过一个问题就是我们的Action如何向视图传递匿名类型的值呢,如果不做特殊处理则无法实现. 接下来我们来看一个示例: 在我们的控制中: using S ...

  3. js中scroll滚动相关

    js中scroll滚动相关 scroll,滚动,一般讨论的是网页整体与浏览器之间的关系. 一.元素相关 属性/方法 解释 element.scrollHeight 返回元素的整体高度. element ...

  4. JMeter资源监控插件PerfMon的使用

    1.插件下载 首先下载jmeter的插件管理工具,下载地址:jmeter-plugins.org 如英文说明,把下载后的jar包放到jmeter的安装目录lib/ext文件夹下,重启jmeter,就会 ...

  5. Linux-shell学习笔记1

    1.检查 /etc/shells 这个文件可以得到有多少可用的shell,一般有一下几个: /bin/sh (已经被 /bin/bash 所取代) /bin/bash (就是 Linux 默认的 sh ...

  6. Python 元組 Tuple

    元組 Tuple 宣告 元組是用逗號分隔的一列值: >>> t = 'a',1,'b',2,'c',3>>> t('a', 1, 'b', 2, 'c', 3)&g ...

  7. 3-3 用户管理-新建用户useradd和passwd

    3.用户管理 终端命令 提示:创建用户/删除用户/修改其他用户密码的终端命令都需要通过sudo执行 3.1创建用户/修改密码/删除用户 序号 命令 作用 说明 01 useradd -m -g 组 新 ...

  8. 【西北师大-2108Java】第五次作业成绩汇总

    [西北师大-2108Java]第五次作业成绩汇总 作业题目 面向对象程序设计(JAVA) 第7周学习指导及要求 实验目的与要求 (1)掌握四种访问权限修饰符的使用特点: (2)掌握Object类的用途 ...

  9. day88_11_8,事务的隔离级别celery定时订单与项目整合。

    一.事务的隔离级别. mysql的默认数据库级别是可重复读,一般的应用使用的是读已提交 http://www.zsythink.net/archives/1233/ 1. Read UnCommitt ...

  10. Statements、PreparedStatement及CallableStatement(三)

    当获得了与数据库的连接后,就可以与数据库进行交互了.JDBC Statement,CallableStatement和PreparedStatement接口定义了可用于发送SQL或PL/SQL命令,并 ...