当前位置: 首页 > news >正文

Android系统架构

文章目录

  • Android系统架构
    • Android四层架构
      • 01.Linux内核层
      • 02.系统运行库层
      • 03.应用框架层
      • 04.应用层
    • Android应用开发特色
      • 01.四大组件
      • 02.丰富的系统控件
      • 03. SQLite数据库
      • 04.强大的多媒体
      • 05.地理位置定位

Android系统架构

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

Android四层架构

01.Linux内核层

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

02.系统运行库层

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

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

03.应用框架层

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

04.应用层

所有安装在手机上的应用程序都是属于这一层的,比如系统自带的联系人、短信等程序,或者是你从Google Play上下载的小游戏,当然还包括你自己开发的程序。

结合下图你将会理解得更加深刻,图片源自维基百科

在这里插入图片描述

Android应用开发特色

Android系统到底提供了哪些东西,可供我们开发出优秀的应用程序

01.四大组件

Android系统四大组件分别是活动(Activity)、服务(Service)、广播接收器(Broadcast Receiver)和内容提供器(Content Provider)。其中活动是所有Android应用程序的门面,凡是在应用中你看得到的东西,都是放在活动中的。而服务就比较低调了,你无法看到它,但它会一直在后台默默地运行,即使用户退出了应用,服务仍然是可以继续运行的。广播接收器允许你的应用接收来自各处的广播消息,比如电话、短信等,当然你的应用同样也可以向外发出广播消息。内容提供器则为应用程序之间共享数据提供了可能,比如你想要读取系统电话簿中的联系人,就需要通过内容提供器来实现。

02.丰富的系统控件

Android系统为开发者提供了丰富的系统控件,使得我们可以很轻松地编写出漂亮的界面。当然如果你品位比较高,不满足于系统自带的控件效果,也完全可以定制属于自己的控件。

03. SQLite数据库

Android系统还自带了这种轻量级、运算速度极快的嵌入式关系型数据库。它不仅支持标准的SQL语法,还可以通过Android封装好的API进行操作,让存储和读取数据变得非常方便。

04.强大的多媒体

Android系统还提供了丰富的多媒体服务,如音乐、视频、录音、拍照、闹铃,等等,这一切你都可以在程序中通过代码进行控制,让你的应用变得更加丰富多彩。

05.地理位置定位

移动设备和PC相比起来,地理位置定位功能应该可以算是很大的一个亮点。现在的Android手机都内置有GPS,走到哪儿都可以定位到自己的位置,发挥你的想象就可以做出创意十足的应用,如果再结合功能强大的地图功能,LBS这一领域潜力无限。

如果对你有帮助,就一键三连呗(点赞+收藏+关注),我会持续更新更多干货~~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring 声明式事务 @Transactional
  • 【STM32单片机_(HAL库)】3-2-3【中断EXTI】【电动车报警器项目】433M无线收发模块实验
  • 【LeetCode热题100】滑动窗口
  • Spring MVC中获取请求参数的方式
  • leetcode_55. 跳跃游戏
  • 【杂乱算法】七种常见的排序
  • 如何使用unittest和pytest进行python脚本的单元测试
  • 计算机储存单位换算:1KB等于多少GB
  • MS8561/8562精密、低噪、CMOS、轨到轨输入输出运算放大器
  • AWS 注册一年后是否需要花钱?
  • 贪心算法之重叠区间问题
  • Linux | 深入探究Linux进程控制:从fork到进程等待再到进程替换
  • 使用WINUI3 编写一个小软件1 C#
  • 如何更改select option边框颜色和选中的颜色
  • 鸿蒙(API 12 Beta3版)【录像流二次处理(C/C++)】媒体相机开发指导
  • Android优雅地处理按钮重复点击
  • Angular Elements 及其运作原理
  • avalon2.2的VM生成过程
  • cookie和session
  • Java 最常见的 200+ 面试题:面试必备
  • jdbc就是这么简单
  • JS学习笔记——闭包
  • log4j2输出到kafka
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • npx命令介绍
  • Object.assign方法不能实现深复制
  • PHP变量
  • python学习笔记 - ThreadLocal
  • React-flux杂记
  • vue.js框架原理浅析
  • 百度小程序遇到的问题
  • 前端技术周刊 2019-01-14:客户端存储
  • 如何借助 NoSQL 提高 JPA 应用性能
  • 用Node EJS写一个爬虫脚本每天定时给心爱的她发一封暖心邮件
  • 怎么将电脑中的声音录制成WAV格式
  • 正则与JS中的正则
  • 《码出高效》学习笔记与书中错误记录
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​水经微图Web1.5.0版即将上线
  • (4) PIVOT 和 UPIVOT 的使用
  • (done) 两个矩阵 “相似” 是什么意思?
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (三)Pytorch快速搭建卷积神经网络模型实现手写数字识别(代码+详细注解)
  • .htaccess配置重写url引擎
  • .net 设置默认首页
  • .NET连接数据库方式
  • .NET面试题解析(11)-SQL语言基础及数据库基本原理
  • .NET命令行(CLI)常用命令
  • @Async 异步注解使用
  • @RequestMapping用法详解
  • [ solr入门 ] - 利用solrJ进行检索
  • [ 英语 ] 马斯克抱水槽“入主”推特总部中那句 Let that sink in 到底是什么梗?
  • [Android View] 可绘制形状 (Shape Xml)
  • [android] 练习PopupWindow实现对话框
  • [Angular 基础] - 表单:响应式表单