应用基础知识

Android 应用程序是用 Java 编写的。Android SDK 工具将代码,数据和资源文件编译为 APK(Android 包)。通常,一个 APK 文件包含应用的所有内容。

每个应用程序都在自己的虚拟机(VM)上运行,以便应用程序可以与其他应用程序隔离运行。Android 系统使用最小权限原则。每个应用程序只能访问其工作所需的组件,而不是更多。但是,有一些应用程序可以与其他应用程序共享数据,例如通过在应用程序之间共享 Linux 用户 ID,或者应用程序可以请求访问 SD 卡,联系人等设备数据的权限。

应用组件

应用程序组件是 Android 应用程序的构建块。每个组件在 Android 应用程序中扮演特定角色,该应用程序具有不同的用途并具有不同的生命周期(组件创建和销毁的方式和时间流程)。以下是四种类型的应用程序组件:

  1. 活动: 活动表示具有用户界面(UI)的单个屏幕。Android 应用可能包含多项活动。 (例如,电子邮件应用程序可能有一个活动列出所有电子邮件,另一个用于显示每封电子邮件的内容,另一个用于撰写新电子邮件。)应用程序中的所有活动共同创建用户体验(UX)。
  2. 服务: 服务在后台运行以执行长时间运行的操作或执行远程进程的工作。服务不提供任何 UI,它仅在用户输入的后台运行。 (例如,当用户在不同的应用程序中时,服务可以在后台播放音乐,或者它可以从互联网上下载数据而不会阻止用户与 Android 设备的交互。)
  3. 内容提供商: 内容提供商管理共享应用数据。有四种方法可以在应用程序中存储数据:它可以写入文件并存储在文件系统中,插入或更新到 SQLite 数据库,发布到 Web 或保存在 App 可以访问的任何其他持久存储位置。通过内容提供商,其他应用可以查询甚至修改数据。 (例如,Android 系统提供管理用户联系信息的内容提供商,以便任何具有权限的应用可以查询联系人。)内容提供商还可用于保存应用程序专用的数据,以提高数据完整性。
  4. 广播接收器: 广播接收器响应系统范围的广播广播(例如,宣布屏幕已关闭,电池电量低等的广播)或来自应用程序(例如,让其他应用程序知道某些数据已被下载到设备并可供他们使用)。广播接收器没有 UI,但是它们可以在状态栏中显示通知以提醒用户。通常,广播接收器用作应用程序其他组件的网关,主要由活动和服务组成。

Android 系统的一个独特之处在于,任何应用程序都可以启动另一个应用程序的组件(例如,如果你想要拨打电话,发送短信,打开网页或查看照片,有一个应用程序已经这样做,你的应用程序可以利用它,而不是为同一个任务开发一个新的活动)。

当系统启动一个组件时,它会启动该应用程序的进程(如果它尚未运行,即每个应用程序在 Android 系统上的任何给定时间只能运行一个前台进程)并实例化该组件所需的类。因此,组件在其所属的应用程序的进程上运行。因此,与其他系统上的应用程序不同,Android 应用程序没有单一入口点(没有 main() 方法)。

由于系统在单独的流程中运行每个应用程序,因此一个应用程序无法直接激活其他应用程序的组件,但 Android 系统可以。因此,要启动另一个应用程序的组件,一个应用程序必须向系统发送一条消息,指定启动该组件的意图,然后系统将启动该组件。

上下文

android.content.Context 的实例提供与执行应用程序的 Android 系统的连接。需要 Context 的实例来访问项目的资源以及有关应用程序环境的全局信息。

让我们有一个易于理解的例子:假设你在酒店,你想要吃点东西。你打电话给客房服务,并要求他们带给你东西或为你清理东西。现在想想这个酒店作为一个 Android 应用程序,你自己作为一项活动,然后客房服务人员就是你的背景,它可以让你访问酒店资源,如客房服务,食品等。

还有一个例子,你坐在一张桌子上的餐厅,每张桌子都有一个服务员,当你想订购食品时,你要求服务员这样做。然后服务员下订单,食物送到你的桌子上。再次在这个例子中,餐厅是一个 Android 应用程序,表或客户是应用程序组件,食品项目是你的应用程序资源,服务员是你的上下文,从而为你提供访问食品等资源的方法。

激活上述任何组件都需要上下文的实例。不仅仅是上述,而且几乎每个系统资源:使用视图创建 UI(稍后讨论),创建系统服务实例,启动新活动或服务 - 都需要上下文。

更详细的描述写在这里