Android应用程序基础知识外文翻译资料

 2023-02-14 12:02

附录A 译文

Android应用程序基础知识

Android应用程序是用Java编程语言编写的。 Android SDK工具将代码以及任何数据和资源文件编译到Android软件包中,后者是一个带有.apk后缀的存档文件。单个.apk文件中的所有代码都被视为一个应用程序,是Android驱动的设备用于安装应用程序的文件。

安装在设备上后,每个Android应用程序都位于自己的安全沙箱中:

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

2.默认情况下,系统为每个应用程序分配一个唯一的Linux用户ID(该ID仅由系统使用,并且应用程序不知道)。系统为应用程序中的所有文件设置权限,以便只有分配给该应用程序的用户ID才能访问它们。

3.每个进程都有自己的虚拟机(VM),因此应用程序的代码与其他应用程序隔离运行。

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

通过这种方式,Android系统实现了最小特权原则。也就是说,默认情况下,每个应用程序只能访问其工作所需的组件,而不能访问它们。这创建了一个非常安全的环境,在该环境中,应用程序无法访问未获得权限的系统部分。

但是,有一些方法可以让应用程序与其他应用程序共享数据,并为应用程序访问系统服务:

1.可以安排两个应用程序共享相同的Linux用户ID,在这种情况下,他们可以访问彼此的文件。为了节省系统资源,具有相同用户ID的应用程序也可以安排在同一个Linux进程中运行并共享同一个VM(应用程序也必须使用相同的证书进行签名)。

2.应用程序可以请求访问设备数据的权限,例如用户的联系人,SMS消息,可安装的存储(SD卡),相机,蓝牙等。用户必须在安装时授予所有应用程序权限。

这涵盖了有关Android应用程序如何在系统中存在的基础知识。本文档的其余部分将向您介绍:

1.定义应用程序的核心框架组件。

2.清单文件,在其中为应用程序声明组件和所需的设备功能。

3.与应用程序代码分开的资源,允许您的应用程序针对各种设备配置优雅地优化其行为。

应用组件

应用程序组件是Android应用程序的基本构建块。每个组件都是系统可以通过其输入应用程序的不同点。并非所有组件都是用户的实际入口点,有些组件彼此依赖,但每个组件都作为自己的实体存在并扮演特定角色 - 每个组件都是一个独特的构建块,可帮助定义应用程序的整体行为。

有四种不同类型的应用程序组件。每种类型都有不同的用途,并具有独特的生命周期,用于定义组件的创建和销毁方式。

以下是四种类型的应用程序组件:

活动

活动表示具有用户界面的单个屏幕。例如,电子邮件应用程序可能有一个活动显示新电子邮件列表,另一个活动用于撰写电子邮件,另一个活动用于阅读电子邮件。虽然这些活动在电子邮件应用程序中协同工作以形成一致的用户体验,但每个活动都独立于其他活动。因此,不同的应用程序可以启动这些活动中的任何一个(如果电子邮件应用程序允许)。例如,相机应用程序可以在组成新邮件的电子邮件应用程序中启动活动,以便用户共享图片。

活动作为Activity的子类实现,您可以在“活动”开发人员指南中了解有关它的更多信息。

服务

服务是在后台运行以执行长时间运行操作或执行远程进程工作的组件。服务不提供用户界面。例如,当用户在不同的应用程序中时,服务可能在后台播放音乐,或者它可能通过网络获取数据而不会阻止用户与活动的交互。另一个组件(例如活动)可以启动服务并让它运行或绑定到它以与之交互。

服务作为服务的子类实现,您可以在服务开发人员指南中了解有关它的更多信息。

内容提供商

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

内容提供程序对于读取和写入应用程序专用但不共享的数据也很有用。例如,Note Pad示例应用程序使用内容提供程序来保存注释。

内容提供程序是作为ContentProvider的子类实现的,并且必须实现一组标准API,以使其他应用程序能够执行事务。有关更多信息,请参阅Content Providers开发人员指南。

广播接收器

广播接收器是响应系统范围广播公告的组件。许多广播来自系统 - 例如,广播宣布屏幕已关闭,电池电量低或拍摄照片。应用程序也可以启动广播 - 例如,让其他应用程序知道某些数据已被下载到设备并可供他们使用。虽然广播接收器不显示用户界面,但是它们可以创建状态栏通知以在广播事件发生时警告用户。但更常见的是,广播接收器只是其他组件的“网关”,旨在完成非常少量的工作。例如,它可能会启动服务以根据事件执行某些工作。

广播接收器被实现为BroadcastReceiver的子类,并且每个广播作为Intent对象被传送。有关更多信息,请参阅Broadcast Receiver类。

Android系统设计的一个独特方面是任何应用程序都可以启动另一个应用程序的组件。例如,如果您希望用户使用设备摄像头捕获照片,则可能有另一个应用程序执行此操作,您的应用程序可以使用它,而不是自己开发活动来捕获照片。您无需合并甚至链接到相机应用程序中的代码。相反,您只需在相机应用程序中启动捕获照片的活动即可。完成后,照片甚至会返回到您的应用程序,以便您可以使用它。对于用户来说,好像相机实际上是应用程序的一部分。

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

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

激活组件

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

使用Intent对象创建intent,该Intent对象定义用于激活特定组件或特定类型组件的消息 - intent可以分别是显式的或隐式的。

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

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

另一个组件类型,内容提供程序,不会被意图激活。相反,它是在ContentResolver请求的目标下激活的。内容解析器处理与内容提供者的所有直接事务,以便与提供者执行事务的组件不需要而是调用ContentResolver对象上的方法。这在内容提供者和请求信息的组件之间留下了一层抽象。 (为安全起见)。

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

1.您可以通过将Intent传递给startActivity()或startActivityForResult()(当您希望活动返回结果时)来启动一个活动(或者给它一些新的东西)。 

2.您可以通过将Intent传递给startService()来启动服务(或向正在进行的服务发出新指令)。或者您可以通过将Intent传递给bindService()来绑定到服务。 

3.您可以通过将Intent传递给sendBroadcast(),sendOrderedBroadcast()或sendStickyBroadcast()等方法来发起广播。 

4.您可以通过在ContentResolver上调用query()来对内容提供程序执行查询。

有关使用意图的更多信息,请参阅意图和意图过滤器文档。以下文档还提供了有关激活特定组件的更多信息:活动,服务,BroadcastReceiver和内容提供商。

应用清单文件

在Android系统启动应用程序组件之前,Android系统必须读取Android Manifest。程序的XML文件,以确定要启动的组件的存在。您的程序必须声明此清单文件中使用的所有组件,并且清单文件必须位于项目的根目录中。

此外,清单文件声明了其他内容,例如:

确定程序所需的所有权限,例如Internet访问权限或用户联系人权限。

声明运行程序所需的最低API版本,该版本可以基于用于开发程序的API版本。

声明程序所需的硬件或软件功能,例如摄像头,蓝牙服务或多点触控屏幕。

API库(不是Andorid的框架API)声明程序需要链接,例如Google Maps Library。

组件声明

清单文件的第一项任务是通知系统有关程序中使用的组件。例如,清单文件可以通过以下方式声明活动:

1. lt;?xml version='1.0' encoding='utf-8'?gt;

2. lt;manifest ... gt;

3. lt;application android:icon='@drawable/app_icon.png' ... gt;

4. lt;activity android:name='com.example.project.ExampleActivity'

5. android:label='@string/example_label' ... gt;

6. lt;/activitygt;

7. ...

8. lt;/applicationgt;

9. lt;/manifestgt;

在lt;applicationgt;元素中,android:icon属性用于指定标记程序的图标。

在lt;activitygt;元素中,android:name属性用于确定从Activity扩展的子类的完整路径名。 android:label属性用于指示用户对此活动可见的标签。

您必须通过以下方式声明程序组件:

1.活动:lt;activitygt;标签

2.服务:lt;servicegt;标签

3.广播接收器:lt;receivergt;标签

4.内容提供者:lt;providergt;标签

如果在程序中使用了活动,服务和内容提供程序,则不会在清单文件中声明,系统将无法识别这些组件,结果是程序将无法运行。但是,广播接收器可以在清单文件中声明,也可以在代码(BroadcastReceiver)中动态创建,并通过调用registerReceiver()在系统中注册。

能够声明组件

如上面的激活组件中所述,您可以使用Intent来启动活动,服务和广播接收器。您可以通过在intent中指示目标组件的名称(使用组件的类名称)来显示启动组件。然而,意图在关于意图的行动概念中确实是强有力的地方。通过intent操作,您可以简单地描述要执行的操作类型(并可选择描述您要处理的数据),允许系统在设备中查找组件并启动它。如果有多个组件可以执行intent中描述的操作,则用户可以选择一个执行。

系统可以识别出它可以对意图做出反应的方式是通过将接收到的意图与设备中其他程序的清单文件的意图过滤器进行比较。

在程序的清单文件中声明组件时,可以选择包含意图过滤器,指示组件对从其他程序接收的意图作出反应的能力。您可以通过添加lt;intent-filtergt;元素作为组件声明元素的子元素来为程序声明一个intent过滤器。

例如,电子邮件程序中的活动可以编写新电子邮件,因此您需要在清单文件中声明一个意图过滤器以“发送”意图响应(以便发送电子邮件)。这样,在您的程序中,活动可以创建发送意图(ACTION_SEND),因此当您调用startaActivity()时,系统将匹配邮件程序中的发送活动并启动它。

声明运行程序所需的条件

Andorid系统可以支持许多不同的设备,这些设备的性能特征也不尽相同。为了防止您的程序安装在程序的较低Android版本上,该程序无法正常工作,在清单文件中声明程序支持的设备和软件尤为重要。这些陈述中的大多数只是一些信息,系统不会读取它们,但其他服务(如Android Market)会读取这些语句,以帮助用户通过自己的设备搜索

剩余内容已隐藏,支付完成后下载完整资料


资料编号:[442242],资料为PDF文档或Word文档,PDF文档可免费转换为Word

您需要先支付 30元 才能查看全部内容!立即支付

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