OBU蓝牙通信软件开发外文翻译资料

 2022-11-03 20:50:42

安卓应用基础知识

Android应用程序是用Java编程语言编写的。 Android SDK工具将代码与任何数据和资源文件一起编译成Android软件包,具有.apk后缀的归档文件。 单个.apk文件中的所有代码都被认为是一个应用程序,是Android设备用于安装应用程序的文件。

一旦安装在设备上,每个Android应用程序都将安装在自己的安全沙箱中:

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

默认情况下,系统为每个应用程序分配一个唯一的Linux用户ID(该ID仅由系统使用,对于应用程序而言是未知的)。 系统为应用程序中的所有文件设置权限,以便只有分配给该应用程序的用户标识才能访问它们。

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

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

这样一来,Android系统就实现了最低权限的原则。 也就是说,默认情况下,每个应用程序只能访问它所需的组件来完成其工作,而不再需要。 这将创建一个非常安全的环境,其中应用程序无法访问未向其授予权限的系统的部分。

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

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

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

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

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

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

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

应用程序组件

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

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

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

活动(Activities)

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

活动是作为Activity的子类实现的,您可以在Activities开发者指南中了解更多信息。

服务(Services)

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

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

内容提供者(Content providers)

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

内容提供者对于读取和写入您的应用程序的私有数据而非共享也很有用。例如,Note Pad示例应用程序使用内容提供商来保存笔记。

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

广播接收器(Broadcast receivers)

广播接收机是响应于全系统广播通知的组件。 许多广播来源于系统 - 例如,广播宣布屏幕已经关闭,电池电量不足或被捕获。 应用程序还可以发起广播 - 例如,让其他应用程序知道某些数据已经下载到设备并可供他们使用。 虽然广播接收机不显示用户界面,但是它们可以创建状态栏通知,以在广播事件发生时提醒用户。 然而,更常见的是,广播接收机仅仅是其他组件的“网关”,并且旨在进行非常少量的工作。 例如,它可能会启动服务以根据事件执行一些工作。

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

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

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

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

激活组件

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

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

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

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

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

有单独的方法激活每种类型的组件:

通过将Intent传递给startActivity()或startActivityForResult()(当您希望活动返回结果时),您可以启动一个活动(或给它一些新功能)。

通过将Intent传递给startService(),您可以启动服务(或给正在进行的服务的新指令)。 或者您可以通过传递Intent tobindService()来绑定到该服务。

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

您可以通过调用ContentResolver上的query()来向内容提供者执行查询。

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

声明组件

清单的主要任务是通知系统应用程序的组件。 例如,清单文件可以声明如下的活动:

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

lt;manifest ... gt;

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

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

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

lt;/activitygt;

lt;/applicationgt;

lt;/manifestgt;

在lt;applicationgt;元素中,android:icon属性指向用于标识应用程序的图标的资源。

在lt;activitygt;元素中,android:name属性指定Activity子类的完全限定类名,android:label属性指定用作活动的用户可见标签的字符串。

您必须以这种方式声明所有应用程序组件:

1,活动的活动元素

2,lt;servicegt;服务元素

3,lt;receivergt;广播接收器的元素

4,内容提供者的lt;providergt;元素

在源中包含但不在清单中声明的活动,服务和内容提供者对于系统是不可见的,因此永远不会运行。 但是,广播接收器可以在清单中声明,也可以在代码(如BroadcastReceiver对象)中动态创建,并通过调用registerReceiver()向系统注册。

声明组件功能

如上所述,在激活组件中,您可以使用Intent启动活动,服务和广播接收器。 您可以通过在目标中明确命名目标组件(使用组件类名称)来实现。 然而,意图的真正意图在于意图行为的概念。 使用意图操作,您只需描述要执行的操作类型(可选择地,要执行操作的数据),并允许系统在设备上查找可执行操作并启动的组件 它。 如果有多个组件可以执行由意图描述的动作,则用户选择要使用的组件。

系统识别可以响应意图的组件的方式是通过将接收的意图与设备上其他应用程序的清单文件中提供的意图过滤器进行比较。

当您在应用程序的清单中声明组件时,您可以选择包含声明组件功能的意向过滤器,以便其可以响应来自其他应用程序的意图。 您可以通过添加一个lt;intent-filtergt;元素作为组件的声明元素的子元素来为组件声明一个意图过滤器。

例如,具有撰写新电子邮件的活动的电子邮件应用程序可以在其清单条目中声明意图过滤器以响应“发送”意图(以便发送电子邮件)。 然后,您的应用程序中的活动可以使用“发送”动作(ACTION_SEND)创建意图,系统与电子邮件应用程序的“发送”活动相匹配,并在使用startActivity()调用意图时启动它。

有关创建意图过滤器的更多信息,请参阅意向和意图过滤器文档。

声明应用程序要求

有各种由Android提供的设备,并不是所有设备都具有相同的功能和功能。 为了防止您的应用程序安装在缺少应用程序所需功能的设备上,请务必通过在清单文件中声明设备和软件要求来清楚地定义应用程序支持的设备类型的配置文件。 大多数这些声明仅供参考,系统不会阅读它们,但是外部服务(如Google Play)会读取它们,以便为用户在从设备搜索应用程序时提供过滤。

例如,如果您的应用程序需要相机并使用Android 2.1(API 7级)中引入的API,则应将其声明为清单文件中的要求。 这样,没有相机且Android版本低于2.1的设备无法从Google Play安装应用程序。

但是,您也可以声明您的应用程序使用相机,但不需要。 在这种情况下

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


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

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

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