基于Android旅游攻略App设计与实现外文翻译资料

 2022-02-22 21:42:59

附录 Y 外文原文

应用基础知识

Android应用程序可以使用Kotlin,Java和C 语言编写。 Android SDK工具将您的代码以及任何数据和资源文件编译到APK中资源包,这是一个以APK为后缀的归档文件。 一个APK文件包含Android应用程序的所有内容,用于Android系统去安装程序。

每个Android应用都位于自己的安全沙箱中,受到以下Android安全功能的保护:

Android操作系统是一个多用户Linux系统,其中每个应用程序都是不同的用户。

默认情况下,系统会为每个应用程序分配一个唯一的Linux用户ID(该ID仅由系统使用,并且应用程序不知道)。 系统为应用程序中的所有文件设置权限, 以便只有分配给该应用程序的用户ID才能访问它们。每个进程都有自己的虚拟机(VM),因此应用程序的代码与其他应用程序隔离运行。

默认情况下,每个应用程序都在自己的Linux进程中运行。 当需要执行任何应用程序的组件时 ,Android系统会启动该进程,然后在不再需要该进程时或系统必须为其他应用程序恢复内存时关闭该进程。

Android系统实现了最小特权原则。 每个应用程序,默认情况下,只有到它需要做的工作并没有更多的组件的访问。 这创建了一个非常安全的环境,在该环境中,应用程序无法访问未获得权限的系统部分。 但是,应用程序可以与其他应用程序共享数据,并且应用程序可以访问系统服务:

可以安排两个应用程序共享相同的Linux用户ID,在这种情况下,他们可以访问彼此的文件。 为了节省系统资源,相同用户ID的app也可以在相同的Linux进程在运行分享相同的虚拟机。 应用程序还必须使用相同的证书进行签名。

应用程序可以请求访问设备数据的权限,例如用户的联系人,短信消息,可安装存储卡(SD卡),摄像头和蓝牙。 用户必须明确授予这些权限。 有关更多信息,请参阅使用系统权限。

本文档的其余部分介绍了以下概念: 核心框架组件定义了您的应用程序。 清单文件,您在其中声明组件和应用程序所需的设备功能。与应用程序代码分开的资源文件,允许您的应用程序优雅地优化其针对各种开发配置的行为 。

应用组件

应用程序组件是Android应用程序的基本构建块。 每个组件都是一个入口点,系统或用户可以通过该入口点进入您的应用程序。 有些组件依赖于其他组件。有四种不同类型的应用程序组件:活动,服务,广播接收器,内容提供商

每种类型都有不同的用途,并具有独特的生命周期,用于定义组件的创建和销毁方式。 以下部分描述了这四种组件 。

活动

一个活动是与用户交互的入口点。 它代表具有用户界面的单个屏幕。 例如,电子邮件应用可能包含一个显示新电子邮件列表的活动,另一个用于撰写电子邮件的活动以及另一个用于阅读电子邮件的活动。 虽然这些活动协同工作以在电子邮件应用程序中形成一致的用户体验,但每个活动都独立于其他活动。 因此,如果电子邮件应用允许,则不同的应用可以启动这些活动中的任何一个 。 例如,相机应用程序可以在组成新邮件的电子邮件应用程序中启动活动以允许用户共享图片。 活动有助于系统和应用程序之间的以下关键交互:

跟踪用户当前关心的内容(屏幕上的内容),以确保系统继续运行托管活动的进程。

知道先前使用的进程包含用户可能返回的事物(已停止的活动),因此更高度地优先考虑这些进程。帮助应用程序处理其进程被终止,以便用户可以返回到恢复其先前状态的活动。

为应用程序提供了一种在彼此之间实现用户流的方法,以及系统协调这些流程的方法。(这里最经典的例子是分享。)

您将一个活动实现为的子类活动类。

服务

一个服务是一个通用的入口点, 用于保持应用程序在后台运行,原因有很多种。 它是一个在后台运行的组件,用于执行长时间运行的操作或执行远程进程的工作。 服务不提供用户界面。 例如, 当用户在不同的应用程序中时,服务可能在后台播放音乐,或者它可能通过网络获取数据而不会阻止用户与活动的交互。 另一个组件(例如活动)可以启动服务并让它运行或绑定它以便与之交互。 实际上有两个非常不同的语义服务告诉系统如何管理应用程序:启动服务告诉系统让它们保持运行直到它们的工作完成。 这可以是在背景中同步一些数据或者甚至在用户离开应用之后播放音乐。 在后台同步数据或播放音乐也代表两种不同类型的启动服务,可以修改系统处理它们的方式:

音乐播放是用户直接知道的东西 ,因此应用程序通过说它想要成为前景并告知用户有关它来告诉系统。 在这种情况下,系统知道它应该非常努力地保持该服务的进程运行,因为如果它消失,用户将无法使用 。

常规后台服务不是用户直接意识到正在运行的东西,因此系统可以更自由地管理其流程。 如果它需要RAM 用于用户更直接关注的事情, 它可能允许它被杀死(然后在稍后的某个时间重新启动服务) 。

绑定服务运行是因为某些其他应用程序(或系统)已经表示它想要使用该服务。 这基本上是为另一个进程提供API的服务。 因此系统知道这些进程之间存在依赖关系,因此如果进程A绑定到进程B中的服务,它就知道它需要保持进程B(及其服务)为A运行。此外,如果进程A是用户关心的东西,然后它也知道过程B是用户也关心的东西。 由于它们的灵活性(无论好坏),服务已成为各种高级系统概念的真正有用的构建块。 动态壁纸,通知监听器, 屏幕保护程序,输入方法,辅助功能服务以及许多其他核心系统功能都构建为应用程序实现的服务,系统应该在运行时绑定。

注意: 如果您的应用针对Android 5.0 ( API级别21 ) 或更高版本,请使用工作调度安排行动的班级。 工作调度程序具有通过优化调度作业来节省电池以降低功耗的优势,并且可以通过使用API。 有关使用此类的更多信息,请参阅工作调度参考文件。

广播接收器

一个广播接收器是一个组件,使系统能够在常规用户流之外向应用程序提供接口,允许应用程序响应系统范围的广播公告。 由于广播接收器是另一个明确定义的应用程序入口,因此系统甚至可以向当前不运行的 应用程序提供广播 。 因此,例如,应用程序可以安排警报发布通知,以告知用户即将发生的事件......并将该警报发送到广播 应用程序的接收者,在闹钟响起之前,应用程序无需继续运行 。 许多广播来自系统,例如,宣布屏幕已关闭,电池电量低或拍摄照片的广播。 应用还可以启动广播。例如,让其他应用知道某些数据已下载到设备并可供他们使用。 虽然广播接收器不显示用户界面,但它们可以创建状态栏通知在广播事件发生时提醒用户。 但更常见的是,广播接收器只是一个网关到其他组件,旨在做很少量的工作。 例如,它可能会安排一个工作服务执行基于与该事件的一些工作调度

内容提供商

一个 内容提供商管理一组共享的应用程序数据,您可以将其存储在文件系统,SQLite数据库, web或应用程序可以访问的任何其他持久存储位置。 通过内容提供商,如果内容提供商允许,其他应用可以查询或修改数据。 例如,Android系统提供管理用户联系信息的内容提供商 。 因此,具有适当权限的任何应用都可以查询内容提供商,例如Contacts Contract Data,用于读取和写入有关特定人员的信息。 将内容提供者视为数据库的抽象 ,因为对于这种常见情况,内置了很多API和支持。 但是,从系统设计的角度来看,它们具有不同的核心目的。 对于系统,内容提供者是用于发布URI方案标识的数据项的app的入口点 。 因此,应用程序可以决定如何将其包含的数据映射到URI命名空间,将这些URI分发给其他实体,这些实体又可以使用它们来访问数据。 在管理应用程序时,系统要做的一些特殊事情 :

分配URI不要求应用程序保持运行,因此URI可以在其拥有的应用程序退出后保留。 当系统必须 从相应的URI 检索 应用程序的数据 时,系统只需要确保拥有的应用程序仍在运行 。

这些URI还提供了一个重要的细粒度安全模型。 例如,应用程序可以将其所拥有的图像的URI放在剪贴板上,但保留其内容提供程序,以便其他应用程序无法自由访问它。 当第二个应用程序尝试访问剪辑上URL时板 ,系统可以允许该应用程序通过临时访问数据 URI权限授予,因此,只允许在该URI后面访问数据,但在第二个应用程序中 没有其他内容 。

内容提供程序对于读取和写入应用程序专用但不共享的数据也很有用。

内容提供程序实现为的子类内容提供商 并且必须实现一组标准API,以使其他应用程序能够执行事务。 Android系统设计的一个独特方面是任何应用程序都可以启动另一个应用程序的组件。 例如,如果您希望用户使用设备相机拍摄照片,那么可能是另一个应用程序,您的应用程序可以使用它而不是开发活动来自己拍摄照片。 您无需合并甚至链接到相机应用程序中的代码。 相反,您只需在捕获照片的相机应用程序中启动活动即可 。 完成后,照片甚至会返回到您的应用,以便您可以使用它。 对于用户来说,好像相机实际上是您应用的一部分。

当系统启动一个组件时,它会启动该应用程序的进程(如果它尚未运行)并实例化该组件所需的类。 例如,如果您的应用启动了捕获照片的相机应用中的活动,则该活动将在属于相机应用的流程中运行,而不是在应用的流程中运行。 因此 ,与大多数其他系统上的应用程序不同,Android应用程序没有单一的入口点。

由于系统在具有限制对其他应用程序访问权限的文件权限的单独进程中运行每个应用程序,因此您的应用程序无法直接 从其他应用程序激活组件。 但是,Android系统可以。 要激活另一个应用程序中的组件,请向系统发送一条指定您的组件的消息意图 开始一个特定的组件。 然后,系统会为您激活组件。

激活组件

四种组件类型中的三种活动,服务和广播接收器,由称为的异步消息激活意图。 Intents在运行时将各个组件相互绑定。 您可以将它们视为从其他组件请求操作消息,无论该组件属于您的应用程序还是其他组件。

使用a创建intent意图object,定义用于激活特定组件(显式意图)或特定组件的消息类型合作(隐含意图)。

对于活动和服务,intent定义要执行的操作(例如视图要么发送某些内容)并且可以指定要执行的数据的URI,以及正在启动的组件可能需要知道的其他内容。 例如,意图可以传达对活动的请求以显示图像或打开网页。 在某些情况下,您可以启动活动来接收结果,在这种情况下,活动也会返回结果 。 例如,您可以发出 意图让用户选择个人联系并将其返回给您。 返回意图包括指向所选联系人的URI。

对于广播接收器,意图仅定义正在广播的通告。 例如,指示设备电池电量低 的广播 仅包括指示的已知动作字符串电池电量低。

与活动,服务和广播接收器不同,内容提供者不会被意图激活。 相反,它们在被来a的request作为 目标时被激活内容解析器。 内容解析器处理与内容提供程序的所有直接事务,以便与提供程序执行事务的组件不需要,而是调用内容分解器。 这在内容提供者和请求信息的组件之间(为了安全性)提供了一层抽象。

有各种方法可以激活每种类型的组件:

你可以通过传递一个活动来开始一个活动或给它一些新的东西 Intent至startActivity()要么startActivityForResult()(当您希望活动返回结果时)。

使用Android 5.0(API级别21)及更高版本,您可以使用工作调度安排行动的类。 对于早期的Android版本,您可以通过传递服务来启动服务(或向正在进行的服务提供新指令)意图至startService()。 您可以通过传递绑定到服务意图至bindService()。

您可以通过传递来发起广播意图对方法如sendBroadcast() sendOrderedBroadcast(),或 sendStickyBroadcast()。

您可以通过调用对内容提供程序执行查询 查询在 ContentResolver的。有关使用意图的更多信息,请参阅意图和意图过滤器文献。 以下文档提供了有关激活特定组件的更多信息:活动,服务,BroadcastReceiver,和内容供应商。

清单文件

在Android系统启动应用程序组件之前,系统必须通过阅读应用程序来了解该组件是否存在清单文件,AndroidManifest.xml中。 您的应用必须在此文件中声明其所有组件,该文件必须位于应用项目目录的根目录中。

除了声明应用程序的组件之外,清单还会执行许多操作,例如:

标识 应用程序所需的任何用户权限,例如Internet访问权限或对用户联系人的读取权限。

声明最小值API级别应用程序所需的,基于应用程序使用的API。

声明应用程序使用或要求的硬件和软件功能, 如相机,蓝牙服务或多功能触摸屏。

声明应用程序需要链接的API库(除Android框架API之外),例如谷歌地图库。

声明组件功能

如上所述,在激活组件 ,您可以使用

原文和译文剩余内容已隐藏,您需要先支付 30元 才能查看原文和译文全部内容!立即支付

以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。