应用基础知识

安装到设备后,每个 Android 应用都运行在自己的安全沙箱内:

  • Android 操作系统是一种多用户 Linux 系统,其中的每个应用都是一个不同的用户;
  • 默认情况下,系统会为每个应用分配一个唯一的 Linux 用户 ID(该 ID 仅由系统使用,应用并不知晓)。系统为应用中的所有文件设置权限,使得只有分配给该应用的用户 ID 才能访问这些文件;
  • 每个进程都具有自己的虚拟机 (VM),因此应用代码是在与其他应用隔离的环境中运行;
  • 默认情况下,每个应用都在其自己的 Linux 进程内运行。Android 会在需要执行任何应用组件时启动该进程,然后在不再需要该进程或系统必须为其他应用恢复内存时关闭该进程。

应用组件

Activity(前台)

Activity 表示具有用户界面的单一屏幕。例如,电子邮件应用可能具有一个显示新电子邮件列表的 Activity、一个用于撰写电子邮件的 Activity 以及一个用于阅读电子邮件的 Activity。 尽管这些 Activity 通过协作在电子邮件应用中形成了一种紧密结合的用户体验,但每一个 Activity 都独立于其他 Activity 而存在。 因此,其他应用可以启动其中任何一个 Activity(如果电子邮件应用允许)。 例如,相机应用可以启动电子邮件应用内用于撰写新电子邮件的 Activity,以便用户共享图片。

Activity 作为 Activity 的子类实现,您可以在 Activity 开发者指南中了解有关它的更多详情。

服务(后台)

服务是一种在后台运行的组件,用于执行长时间运行的操作或为远程进程执行作业。 服务不提供用户界面。 例如,当用户位于其他应用中时,服务可能在后台播放音乐或者通过网络获取数据,但不会阻断用户与 Activity 的交互。 诸如 Activity 等其他组件可以启动服务,让其运行或与其绑定以便与其进行交互。

服务作为 Service 的子类实现,您可以在服务开发者指南中了解有关它的更多详情。

内容提供程序(提供数据)

内容提供程序管理一组共享的应用数据。您可以将数据存储在文件系统、SQLite 数据库、网络上或您的应用可以访问的任何其他永久性存储位置。 其他应用可以通过内容提供程序查询数据,甚至修改数据(如果内容提供程序允许)。 例如,Android 系统可提供管理用户联系人信息的内容提供程序。 因此,任何具有适当权限的应用都可以查询内容提供程序的某一部分(如 ContactsContract.Data),以读取和写入有关特定人员的信息。

内容提供程序也适用于读取和写入您的应用不共享的私有数据。 例如,记事本示例应用使用内容提供程序来保存笔记。

内容提供程序作为 ContentProvider 的子类实现,并且必须实现让其他应用能够执行事务的一组标准 API。 如需了解详细信息,请参阅内容提供程序开发者指南。

广播接收器(通知)

广播接收器是一种用于响应系统范围广播通知的组件。 许多广播都是由系统发起的 — 例如,通知屏幕已关闭、电池电量不足或已拍摄照片的广播。应用也可以发起广播 — 例如,通知其他应用某些数据已下载至设备,并且可供其使用。 尽管广播接收器不会显示用户界面,但它们可以创建状态栏通知,在发生广播事件时提醒用户。 但广播接收器更常见的用途只是作为通向其他组件的“通道”,设计用于执行极少量的工作。 例如,它可能会基于事件发起一项服务来执行某项工作。

广播接收器作为 BroadcastReceiver 的子类实现,并且每条广播都作为 Intent 对象进行传递。 如需了解详细信息,请参阅 BroadcastReceiver 类。

Android 特点

  1. 任何应用都可以启动其他应用的组件。

    1. 例如,如果您想让用户使用设备的相机拍摄照片,很可能有另一个应用可以执行该操作,那么您的应用就可以利用该应用,而不是开发一个 Activity 来自行拍摄照片。 您不需要集成甚至链接到该相机应用的代码,而是只需启动拍摄照片的相机应用中的 Activity。 完成拍摄时,系统甚至会将照片返回您的应用,以便您使用。对用户而言,就好像相机真正是您应用的组成部分。
  2. Android 应用并没有单一入口点(例如,没有 main() 函数)

启动组件

四种组件类型中的三种 — Activity、服务和广播接收器 — 通过名为 Intent 的异步消息进行启动。Intent 会在运行时将各个组件相互绑定(您可以将 Intent 视为从其他组件请求操作的信使),无论组件属于您的应用还是其他应用。

Intent 不会启动另一个组件类型 - 内容提供程序,后者会在成为 ContentResolver 的请求目标时启动。 内容解析程序通过内容提供程序处理所有直接事务,使得通过提供程序执行事务的组件可以无需执行事务,而是改为在 ContentResolver 对象上调用方法。 这会在内容提供程序与请求信息的组件之间留出一个抽象层(以确保安全)。

每种类型的组件有不同的启动方法:

  • 您可以通过将 Intent 传递到 startActivity()startActivityForResult()(当您想让 Activity 返回结果时)来启动 Activity(或为其安排新任务)。
  • 您可以通过将 Intent 传递到 startService() 来启动服务(或对执行中的服务下达新指令)。 或者,您也可以通过将 Intent 传递到 bindService() 来绑定到该服务。
  • 您可以通过将 Intent 传递到 sendBroadcast()sendOrderedBroadcast()sendStickyBroadcast() 等方法来发起广播;
  • 您可以通过在 ContentResolver 上调用 query() 来对内容提供程序执行查询。

清单文件

在 Android 系统启动应用组件之前,系统必须通过读取应用的 AndroidManifest.xml 文件(“清单”文件)确认组件存在。 您的应用必须在此文件中声明其所有组件,该文件必须位于应用项目目录的根目录中。

除了声明应用的组件外,清单文件还有许多其他作用,如:

  • 确定应用需要的任何用户权限,如互联网访问权限或对用户联系人的读取权限
  • 根据应用使用的 API,声明应用所需的最低 API 级别
  • 声明应用使用或需要的硬件和软件功能,如相机、蓝牙服务或多点触摸屏幕
  • 应用需要链接的 API 库(Android 框架 API 除外),如 Google 地图库
  • 其他功能

Android 应用基础知识和应用组件相关推荐

  1. android培训总结范文,android培训基础知识总结

    android培训基础知识总结,有需要的朋友可以参考下. android培训之1. Android的四大组件是哪些,它们的作用? Activity:Activity是Android程序与用户交互的窗口 ...

  2. android系统知识,Android系统基础知识百科

    Android系统基础知识百科 2015-12-16 17:58:31 954浏览 Android系统作为一款功能强大的移动计算平台,在保持开放性的同时,必须提供强健的安全保障.Android的系统安 ...

  3. Appium+python自动化(十五)- Android 这些基础知识,你知多少???(超详解)...

    简介 前边具体操作和实战已经讲解和分享了很多了,但是一些android的一些基础知识,你又知道多少了,你都掌握了吗?这篇就由宏哥给小伙伴们既是一个分享,又是对前边的一次总结.为什么要对这些做一个简单的 ...

  4. Android开发基础知识

    Android 开发 1. Android基础知识 1.1 发展历程 1.2 Android系统体系架构 Android采用分层架构: Kernel层:Android平台的基础.有线程管理和内存管理等 ...

  5. 第四章 Android WiFi基础知识

    系列文章目录 第一章 国内下载AOSP最新源码的方法 第二章 下载AOSP WiFi相关的代码 第三章 将源码导入Android Studio(无需编译idegen) 文章目录 系列文章目录 前言 一 ...

  6. Android Systrace 基础知识(9)-MainThread 和 RenderThread 解读

    本文是 Systrace 系列文章的第九篇,主要是是介绍 Android App 中的 MainThread 和 RenderThread,也就是大家熟悉的「主线程」和「渲染线程」.文章会从 Syst ...

  7. Android 这些基础知识,你知多少?

    android的一些基础知识,你又知道多少了,你都掌握了吗? QA:"那个谁谁谁,我刚刚按照上一次那样操作这款款APP,我死活是跑不起测试脚本了.(内心独白:我去,这个奇怪的问题,一定是他给 ...

  8. Android 动画基础知识学习(下)

    1.属性动画 属性动画可以对任意对象的属性进行动画不仅仅是View,动画默认时间间隔是300ms,默认帧率是100ms/帧. 作用:在一个时间间隔内完成对一个对象从属性值到另一个属性值的改变. 三个常 ...

  9. Android Systrace 基础知识(10) - Binder 和锁竞争解读

    本文是 Systrace 系列文章的第十篇,主要是对 Systrace 中的 Binder 和锁信息进行简单介绍,简单介绍了 Binder 的情况,介绍了 Systrace 中 Binder 通信的表 ...

最新文章

  1. Linux下搭建Lotus Domino集群
  2. H5拍照、预览、压缩、上传采坑记录
  3. RedHat企业版的安装(一)
  4. HBase scan 时 异常 ScannerTimeoutException 解决
  5. [SpringBoot2]定制化原理_SpringBoot定制化组件的几种方式
  6. python病毒usb文件自动安装_win7禁USB自动安装驱动功能避免木马病毒入侵
  7. 三大性质总结:原子性,有序性,可见性
  8. 同样是数据分析师,他靠“打标签”总被夸,我天天加班取数还被骂
  9. openssh 加固
  10. 如何高效的使用Google
  11. python怎么用pandas查找指定字符串_Python Pandas:通过搜索子字符串查找表
  12. 华为设备配置IGMP基本功能
  13. AppLoader的使用
  14. 京东API接口:item_search - 按关键字搜索商品
  15. 认识Python继承:super()
  16. 再获喜讯,思迈特软件入选2021企业数智化转型升级服务全景图
  17. 关于qq一键登录的一些问题
  18. 记一次 controller manager and scheduler 重复重启问题分析
  19. 步进电机应用c语言程序设计实例,51单片机调节步进电机应用C语言程序设计
  20. 华为ensp 401 错误解决方案

热门文章

  1. 类与对象 格式小结 java 1202
  2. jquery-自定义通用方法-jquery通用方法-所有对象的通用方法
  3. jquery-ui-拖
  4. Sql Server导入sql文件
  5. 【Web页面测试】测试点和测试用例
  6. 4.Windows Server2012 R2里面部署 MVC 的网站
  7. 函数实现不放在头文件的原因,及何时可以放头文件的情况【转】
  8. 如何修改SQL Server 2000身份验证模式和系统管理员
  9. Nacos Spring Cloud 快速开始
  10. Tomcat BIO . NIO . ARP 配置