Android入门教程||Android 架构||Android 应用程序组件

news2024/9/26 1:28:26

Android 架构

Android 操作系统是一个软件组件的栈,在架构图中它大致可以分为五个部分和四个主要层。

Android 架构


Linux内核

在所有层的最底下是 Linux - 包括大约115个补丁的 Linux 3.6。它提供了基本的系统功能,比如进程管理,内存管理,设备管理(如摄像头,键盘,显示器)。同时,内核处理所有 Linux 所擅长的工作,如网络和大量的设备驱动,从而避免兼容大量外围硬件接口带来的不便。


程序库

在 Linux 内核层的上面是一系列程序库的集合,包括开源的 Web 浏览器引擎 Webkit ,知名的 libc 库,用于仓库存储和应用数据共享的 SQLite 数据库,用于播放、录制音视频的库,用于网络安全的 SSL 库等。


Android程序库

这个类别包括了专门为 Android 开发的基于 Java 的程序库。这个类别程序库的示例包括应用程序框架库,如用户界面构建,图形绘制和数据库访问。一些 Android 开发者可用的 Android 核心程序库总结如下:

  • android.app - 提供应用程序模型的访问,是所有 Android 应用程序的基石。
  • android.content - 方便应用程序之间,应用程序组件之间的内容访问,发布,消息传递。
  • android.database - 用于访问内容提供者发布的数据,包含 SQLite 数据库管理类。
  • android.opengl - OpenGL ES 3D 图片渲染 API 的 Java 接口。
  • android.os - 提供应用程序访问标注操作系统服务的能力,包括消息,系统服务和进程间通信。
  • android.text - 在设备显示上渲染和操作文本。
  • android.view - 应用程序用户界面的基础构建块。
  • android.widget - 丰富的预置用户界面组件集合,包括按钮,标签,列表,布局管理,单选按钮等。
  • android.webkit - 一系列类的集合,允许为应用程序提供内建的 Web 浏览能力。

看过了 Android 运行层内的基于 Java 的核心程序库,是时候关注一下 Android 软件栈中的基于 C/C++ 的程序库。


Android运行时

这是架构中的第三部分,自下而上的第二层。这个部分提供名为 Dalvik 虚拟机的关键组件,类似于 Java 虚拟机,但专门为 Android 设计和优化。

Dalvik 虚拟机使得可以在 Java 中使用 Linux 核心功能,如内存管理和多线程。Dalvik 虚拟机使得每一个 Android 应用程序运行在自己独立的虚拟机进程。

Android 运行时同时提供一系列核心的库来为 Android 应用程序开发者使用标准的 Java 语言来编写 Android 应用程序。


应用框架

应用框架层以 Java 类的形式为应用程序提供许多高级的服务。应用程序开发者被允许在应用中使用这些服务。

  • 活动管理者 - 控制应用程序生命周期和活动栈的所有方面。
  • 内容提供者 - 允许应用程序之间发布和分享数据。
  • 资源管理器 - 提供对非代码嵌入资源的访问,如字符串,颜色设置和用户界面布局。
  • 通知管理器 - 允许应用程序显示对话框或者通知给用户。
  • 视图系统 - 一个可扩展的视图集合,用于创建应用程序用户界面。

应用程序

顶层中有所有的 Android 应用程序。你写的应用程序也将被安装在这层。这些应用程序包括通讯录,浏览器,游戏等。

Android 应用程序组件

应用程序组件是一个Android应用程序的基本构建块。这些组件由应用清单文件松耦合的组织。AndroidManifest.xml描述了应用程序的每个组件,以及他们如何交互。

以下是可以在Android应用程序中使用的四个主要组件。

组件描述
Activities描述UI,并且处理用户与机器屏幕的交互。
Services处理与应用程序关联的后台操作。
Broadcast Receivers处理Android操作系统和应用程序之间的通信。
Content Providers处理数据和数据库管理方面的问题。

Activities

一个活动标识一个具有用户界面的单一屏幕。举个例子,一个邮件应用程序可以包含一个活动用于显示新邮件列表,另一个活动用来编写邮件,再一个活动来阅读邮件。当应用程序拥有多余一个活动,其中的一个会被标记为当应用程序启动的时候显示。

一个活动是Activity类的一个子类,如下所示:

public class MainActivity extends Activity {

}

Services

服务是运行在后台,执行长时间操作的组件。举个例子,服务可以是用户在使用不同的程序时在后台播放音乐,或者在活动中通过网络获取数据但不阻塞用户交互。

一个服务是Service类的子类,如下所示:

public class MyService extends Service {

}

Broadcast Receivers

广播接收器简单地响应从其他应用程序或者系统发来的广播消息。举个例子,应用程序可以发起广播来让其他应用程序指导一些数据已经被下载到设备,并且可以供他们使用。因此广播接收器会拦截这些通信并采取适当的行动。

广播接收器是BroadcastReceiver类的一个子类,每个消息以Intent对象的形式来广播。

public class MyReceiver  extends  BroadcastReceiver {

}

Content Providers

内容提供者组件通过请求从一个应用程序到另一个应用程序提供数据。这些请求由ContentResolver类的方法来处理。这些数据可以是存储在文件系统、数据库或者其他其他地方。

内容提供者是ContentProvider类的子类,并实现一套标准的API,以便其他应用程序来执行事务。

public class MyContentProvider extends  ContentProvider {

}

我们将在独立的章节中通过这些标签的细节来涵盖应用程序组件。

附件组件

有一些附件的组件用于以上提到的实体、他们之间逻辑、及他们之间连线的构造。这些组件如下:

组件描述
Fragments代表活动中的一个行为或者一部分用户界面。
Views绘制在屏幕上的UI元素,包括按钮,列表等。
Layouts控制屏幕格式,展示视图外观的View的继承。
Intents组件间的消息连线。
Resources外部元素,例如字符串资源、常量资源及图片资源等。
Manifest应用程序的配置文件。

 

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

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

相关文章

Redis的缓存穿透、缓存击穿和缓存雪崩

目录 一、解释说明 二、缓存穿透 1. 什么是缓存穿透? 2. 常见的两种解决方案 (1)缓存空对象 (2)布隆过滤 3. 编码解决商品查询的缓存穿透问题 三、缓存雪崩 1. 什么是缓存雪崩? 2. 缓存雪崩解决方…

蓝桥杯上岸每日N题 第七期(小猫爬山)!!!

蓝桥杯上岸每日N题 第七期(小猫爬山)!!! 同步收录 👇 蓝桥杯上岸必背!!!(第四期DFS) 大家好 我是寸铁💪 冲刺蓝桥杯省一模板大全来啦 🔥 蓝桥杯4月8号就要开始了 &a…

JS中的原型和原型链

原型 1.普通对象 每个对象都有一个__proto__属性,该属性指向对象的原型属性 const obj { name: 张三 }console.log(obj, obj.__proto__);console.log(Object, Object.prototype);我们可以得出:obj.proto Object.prototype console.log(obj.__proto__ Object.pr…

【黑马程序员前端】JavaScript入门到精通(2)--20230801

B站链接 【黑马程序员前端】JavaScript入门到精通(1)–20230801 【黑马程序员前端】JavaScript入门到精通(2)–20230801 2.web APIs资料(续前) web APIs第六天 01-正则表达式的使用 <!DOCTYPE html> <html lang"en"><head><meta charset&quo…

谷歌创始人布林重返职场,投入研发AI杀手锏!预计下半年推出下一代通用模型『Gemini』,和OpenAI的终局之战!

夕小瑶科技说 原创 作者 | 王思若 大家好&#xff0c;我是王思若。在大模型混战的当下&#xff0c;去繁就简&#xff0c;最核心的目标或者使命始终是通用人工智能AGI&#xff0c;但目前而言&#xff0c;也只有OpenAI和Google可能会在这个需要海量算力支撑和资金支持的方向上构…

【Spring】AOP切点表达式

文章目录 1、语法2、通配符3、execution4、within5、annotation6、args7、args8、bean9、this10、target11、target12、within13、表达式组合14、补充 1、语法 动作关键词(访问修饰符 返回值 包名.类/接口名 .方法名(参数)异常名) 举例&#xff1a; execution(public User c…

frida学习及使用

文章目录 安装frida安装python3.7设置环境变量安装pycharm和nodejs 使用frida将frida-server push到手机设备中端口转发安装apk使用jadx查看java代码运行frida-server frida源码阅读frida hook方法Frida Java层hoookJavaHook.javaJavaHook.js Frida native层hook 一NativeHook.…

【Leetcode】(自食用)找到消失的数字

step by step. 题目&#xff1a; 给你一个含 n 个整数的数组 nums &#xff0c;其中 nums[i] 在区间 [1, n] 内。请你找出所有在 [1, n] 范围内但没有出现在 nums 中的数字&#xff0c;并以数组的形式返回结果。 示例 1&#xff1a; 输入&#xff1a;nums [4,3,2,7,8,2,3,1] 输…

模板方法模式——定义算法的框架

1、简介 1.1、概述 模板方法模式是结构最简单的行为型设计模式&#xff0c;在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式&#xff0c;可以将一些复杂流程的实现步骤封装在一系列基本方法中。在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法…

js沙箱逃逸

目录 一、什么是沙箱(sandbox) 二、沙箱技术的实现 & node.js 2.1简单沙箱程序示例 2.2this.tostring S1&#xff1a; S2&#xff1a; 三、arguments.callee.caller 一、什么是沙箱(sandbox) 在计算机安全性方面&#xff0c;沙箱&#xff08;沙盒、sanbox&#xff…

【【萌新的STM32学习-4】】

萌新的STM32学习-4 STM32系统框架 1.1 Cortex M 内核& 芯片 F1有四个驱动单元 四个被动单元 AHB 高级高性能总线 APB 高级外围总线 部分系统结构 最上面的ICode 总线直接连接到了内部Flash 不需要通过总线矩阵 . D Code 总线&#xff08;D - Bus&#xff09; 这是Cort…

Kubernetes高可用集群二进制部署(五)kubelet、kube-proxy、Calico、CoreDNS

Kubernetes概述 使用kubeadm快速部署一个k8s集群 Kubernetes高可用集群二进制部署&#xff08;一&#xff09;主机准备和负载均衡器安装 Kubernetes高可用集群二进制部署&#xff08;二&#xff09;ETCD集群部署 Kubernetes高可用集群二进制部署&#xff08;三&#xff09;部署…

Delphi Enterprise Crack

Delphi Enterprise Crack Delphi帮助您使用Object Pascal为Windows、Mac、Mobile、IoT和Linux构建和更新数据丰富、超连接、可视化的应用程序。Delphi Enterprise适合开发团队构建客户端/服务器或多层应用程序、REST服务等。 Delphi功能 单一代码库-用更少的编码工作为所有主要…

MySQL 详细学习教程【万字长文, 建议收藏】

目录 1. Mysql入门1.1 Mysql5.7 安装配置1.2 命令行连接到Mysql1.3 图形化软件1.3.1 Navicat1.3.2 SQLyog 1.4 数据库三层结构 2. Java操作数据库、表2.1 创建数据库2.2 查询数据库2.3 备份恢复数据库2.4 创建表2.5 修改表 3 CRUD3.1 insert插入3.2 update修改3.3 delete修改3.…

一篇文章搞定《LeakCanary源码详解(全)》

一篇文章搞定《LeakCanary源码解析》 前言LeakCanary和LeakCanary2区别LeakCanary的快速使用第一步&#xff1a;添加依赖第二步&#xff1a;初始化LeakCanary第三步&#xff1a;运行应用程序并监测内存泄漏 LeakCanary基础铺垫四大引用WeakReference和ReferenceQueueRefercence…

【Spring】(二)从零开始的 Spring 项目搭建与使用

文章目录 前言一、Spring 项目的创建1.1 创建 Maven 项目1.2 添加 Spring 框架支持1.3 添加启动类 二、储存 Bean 对象2.1 创建 Bean2.1 将 Bean 注册到 Spring 容器 三、获取并使用 Bean 对象3.1 获取Spring 上下文3.2 ApplicationContext 和 BeanFactory 的区别3.3 获取指定的…

2023-02-03——2023-08-03,半年以来与客服交流的记录【CSND 文章撰写 网站使用求解】客服咨询交流记录(长期更新ing)

这世界上久处不厌,都是因为用心。 🎯作者主页: 追光者♂🔥 🌸个人简介: 💖[1] 计算机专业硕士研究生💖 🌿[2] 2023年城市之星领跑者TOP1(哈尔滨)🌿 🌟[3] 2022年度博客之星人工智能领域TOP4🌟 🏅[4] 阿里云社区特邀专家博主🏅 🏆

Cesium 实战教程 - 调整 3dtiles 倾斜摄影大小

Cesium 实战教程 - 调整 3dtiles 倾斜摄影大小 核心代码完整代码在线示例 之前由于误解遇到一个特殊的需求&#xff1a;想要把三维球上叠加倾斜摄影进行自由放大缩小&#xff0c;跟随地图的缩放进行缩放。 后来经过搜索、尝试&#xff0c;终于实现了需求。 但是&#xff0c;后…

什么是强化学习?

&#x1f4dd;什么是强化学习&#xff1f; 1. &#x1f4dd;监督&#xff0c;非监督&#xff0c;强化2. &#x1f4dd;非 i.i.d3. &#x1f4dd;强化学习基本形式4. &#x1f4dd;马尔可夫过程 &#x1f31f; 强化学习&#xff08;Reinforcement Learning&#xff0c;RL&#x…

windows安装kafka配置SASL-PLAIN安全认证

目录 1.Windows安装zookeeper&#xff1a; 1.1下载zookeeper 1.2 解压之后如图二 1.3创建日志文件 1.4复制 “zoo_sample.cfg” 文件 1.5更改 “zoo.cfg” 配置 1.6新建zk_server_jaas.conf 1.7修改zkEnv.cmd 1.8导入相关jar 1.9以上配置就配好啦&#xff0c;接下来启…