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

 2022-10-26 10:17:31

英语原文共 14 页,剩余内容已隐藏,支付完成后下载完整资料


Android应用程序基础

Android应用程序是使用Java编程语言编写的。Android SDK工具编译的任何数据和资源代码文件一起构成一个Android包,这个Android包是.apk后缀的归档文件。在一个.apk文件中的所有代码被认为是一个应用程序,是可供Android平台的设备用于安装应用程序的文件。

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

  • Android操作系统是一个多用户的Linux系统,其中每个应用程序是不同的用户。
  • 默认情况下,系统分配的每个应用程序的唯一的Linux用户ID(ID是用于系统未知的应用程序)。该系统为所有应用程序设置文件权限,以便于只有分配了用户ID的应用程序可以访问它们。
  • 每个进程都有自己的虚拟机(VM),所以应用程序的代码运行是独立于其它的应用程序的。
  • 在默认情况下,每个应用程序在它自己的Linux进程中运行。Android启动进程时,任何应用程序的组件需要被执行,当它不在需要或者系统需要为其它的应用程序恢复内存时关闭进程。

通过这种方式,在Android系统中实现最小特权原则。即每一个应用程序在默认情况下只是访问它的组件,并且没有更多的工作。这将创造一个非常安全的环境,在这个环境中,应用程序无法访问没有被赋予权限的那部分系统。

然而,存在用于应用程序与其它应用程序共享数据和为应用程序访问系统服务的方法:

  • 使两个应用程序共享相同的Linux用户ID,在这种情况下,它们可以相互访问对方的文件。为了节省系统资源,具有相同的用户ID的应用程序也能运行在相同的Linux进程和共享相同的VM(应用程序必须使用相同的证书)。
  • 应用程序可以申请权限来获取设备数据(如用户的联系人、短信、挂载存储(SD卡),相机,蓝牙等。所有应用程序权限必须在用户安装程序时被授予。

覆盖最基本的关于一个Android应用程序如何在系统中存在。本文的其余部分介绍:

  • 定义应用程序的核心框架组件。
  • 声明应用程序所需的组件和设备特性的清单文件。
  • 从应用程序代码分开,并允许您的应用程序正常优化的设备配置各种其行为的资源。

应用程序组件

应用组件是一个Android应用程序的最重要的基石。每个组件都是一个不同的通过系统进入应用程序的点。并非所有的组件是用户的实际切入点并且它们互相依赖,但每一个组件作为自己的实体存在,扮演一个特定的角色,每个组件都是一个独特的建筑模块,可以帮助定义应用程序的整体行为。

应用程序组件有四种不同类型。每种类型提供不同的目的,并具有明显的生命周期,它定义了如何创建和销毁组件。

这里有四种类型的应用程序组件的:

活动(actitities):

一个活动代表一个带有用户界面的单个屏幕。例如,一个邮件应用程序可能有一个显示新邮件的活动,一个写邮件的活动,一个读邮件的活动。尽管活动的协同合作构成邮件应用程序的用户体验,但是每一个之间都是相互独立的。所以,一个不同的应用程序能够启动任意一个活动(如果邮件应用程序允许)。例如,当用户需要分享照片时,一个照相机应用程序能够启动邮件应用程序中写邮件的活动。

activity是继承了Activity的子类,你能够在Activity开发者指导中学到更多。

服务(services):

服务是一个组件,它在后台运行,用于执行长时间操作和执行远程操作。服务没有提供用户界面。例如,当用户在使用其他不同的应用时,服务可以在后台播放音乐,或者当从网上获得数据时,不阻断用户与activity的联系。其它组件如activity能够启动或者绑定service来与service进行交互。

service是继承了Service的子类,你能够在Service开发者指导中学到更多。

内容提供者(content providers):

内容提供者管理设置共享的应用数据。数据可以存储在文件系统,SQLite数据库,网站或其它的应用程序可接受的存储位置。通过内容提供者,其它的应用程序可以查询,甚至修改这个应用程序的数据(如果内容提供者允许)。例如,Android系统提供一个管理用户联系人信息的内容提供者,那么,任何有权限的应用能够查询这部分的内容提供者(如联系人数据)来读或写关于一个特定的人的信息。

内容提供者对读和写应用程序没有分享的数据也是有用的。例如,Note Pad使用内容提供者来保存笔记。

Content privoder是继承了ContentProvider的子类并且实现使其它的应用程序能够执行事务的API标准,你能够在ContentProvider开发者指导中学到更多信息。

广播接收者(broadcast receivers):

广播接收者是一个接受并处理系统的广播的组件。一些广播由系统产生,例如,提示屏幕关闭的广播,电量过低的广播,拍照的广播。应用程序也能够发布广播,例如,让其它的应用程序知道设备下载了一些数据并且能够使用。虽然广播接收者没有显示用户界面,它们可以创建状态通知来提醒用户当广播出现时。通常,广播接收者只是通往其它组件的“门”和尝试做极小量的工作。例如,启动一个服务来执行一些基于事件的工作。

broadcast receiver是继承了BroadcastReceiver的子类并且每一个广播被认为是意图对象,你能够在BroadcastReceiver开发者指导中学到更多信息。

一个独特的Android系统设计是任何的一个应用程序都能够启动另一个应用程序的组件。例如,你想用户使用照相机拍照,如果有已经实现这种功能的应用程序并且你的应用程序能使用它,那么你就不需要写一个应用程序来实现拍照功能。你的程序不需要包含或者连接这个照相机应用程序的代码。相反,你只需要启动这个拍照应用程序中的实现拍照功能的Activity。当拍完后,拍好的照片甚至可以返回给你的应用程序。对于用户来说,照相机好像是你的应用程序的一部分。

当系统启动一个组件时,系统启动这个应用程序的进程(如果组件没有运行),初始化这个组件所需要的类。例如,应用程序启动了一个拍照功能程序的活动,这时这个活动运行在照相机应用程序的进程中,而不是在你的应用程序中的进程中。因此,不像其它大多数操作系统的中的程序一样,Android程序没有一个单独的入口点(例如没有main()函数)。

因为系统运行应用程序都是在各自的独立进程中,并且文件都有限制其他程序访问的权限,所以你的应用程序不能直接激活其它应用程序中的组件。但是Android系统可以。为了激活其它应用程序中的组件,你必须要向系统发送一个消息来详细说明你要启动一个特定组件的意图,这样系统就会为你激活这个组件。

激活组件

四大组件中的三个组件——活动、服务和广播接收者——是由一种叫意图的异步消息来激活的。意图是无论这个组件是否属于你的应用程序,都在运行时将单独的组件与其他组件绑定在一起(你可以把意图看作是其他组件要求动作的消息)。

一个意图是一个意图对象,它定义了一个消息来激活某个特定组件或者某种特定类型的组件。意图可以是显示的也可以是隐式的。

对于活动和服务,一个意图定义了需要执行的操作(例如,要“view”或者“send”一些东西)和需要进行操作数据的URI(组件需要在一开始需要知道一些东西)。例如,一个意图可能会为一个活动传递一个请求来显示一张图片或者打开一个网页。有时候,你可以启动一个活动来接收返回的结果,在这个例子中,这个活动返回的结果也是使用一个意图(例如,你能够发送一个意图来让用户选择一个个人的联系方式并返回给你——这个返回的意图就包含了一个指向那个被选择的联系人的URI)。

对于广播接收者,意图简单的定义了需要广播的内容(例如,一个用来表明设备电量很低的广播仅包含了一个“电池电量很低”的字符串)。

另一种组件类型内容提供者不是由意图来激活的,而是接收到来自内容解决者的请求时激活的。

它们都有各自的方法来激活相应的组件:

  • 可以通过传递一个意图给startActivity()方法或startActivityForResult()方法(当你想要活动返回结果)来启动一个活动(或者给他一些新的要做的内容)。
  • 可以通过传递一个意图给startService()方法来启动一个服务(或者给一个正在运行的服务一些新的指令)。或者你可以通过传递意图到bindService()方法来绑定一个服务。
  • 可以通过传递一个意图到如sendBroadcast()方法、sendOrderedBroadcast()方法或者sendStickyBroadcast()方法等来初始化一个广播。
  • 可以通过调用内容解决者的query()方法来执行一次内容提供者的查询操作。

更多的关于使用意图的内容,可以参看文档中的Intents and Intent Filters。更多的关于激活特定组件的内容可以参看文档中的Activities、Services、BroadcastReceiver、Content Providers。

关于Manifest文件

在Android系统能够启动一个应用程序组件之前,Android系统必须通过读取这个APP的AndroidManifest.xml(即“清单”文件)文件来确定要启动的组件的存在。应用程序必须在这个文件中声明所有的组件,并且这个清单文件必须在项目的根目录下。

这个清单文件另外还声明一些其它的东西,例如:

  • 验证这个程序所需要的所有权限,如意图访问权限或者读取用户联系人权限。
  • 声明这个运行这个程序运行的最低API版本,这个根据开发该程序所使用的API版本确定。
  • 声明该程序所需要的硬件或软件特征,比如照相机、蓝牙服务或者多点触屏。
  • 声明该程序需要链接的API库(不是Andorid的framework APIs),比如Google Maps library。
  • 更多。

组件声明

清单文件的首要任务就是通知系统关于应用程序程序中用的组件。例如,一个清单文件可以用以下的方式来声明一个活动:

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属性用于标示这个活动的对于用户可见的标注。

你必须要用这种方式来声明所有的应用程序组件:

  • lt;activitygt;元素声明活动。
  • lt;servicegt;元素声明服务。
  • lt;receivergt;元素声明广播接收者。
  • lt;privodergt;元素声明内容提供者。

当程序中用到活动、服务和内容提供者,如果没有在清单文件中声明,那么组件将不会被系统知道,最终导致程序不能运行。然而,广播接收者既可以在清单文件中声明也可以在代码中动态创建(作为广播接收者对象),并通过调用registerReceiver()方法在系统中注册。

声明组件的能力

正如组件激活中所述,可以使用一个意图来启动活动、服务和广播接收者。也可以通过在意图中表明目标组件的名字(使用组件的类名)来显示的启动组件。然而,意图真正强大的地方在与关于意图操作的概念。通过意图操作,可以简单地描述需要执行的操作的类型(并且有选择的描述你要处理的操作的数据),允许系统在设备中找到这个组件并启动它。如果有多个组件能够执行意图中描述的意图,这时用户就可以选择一个来使用。

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

当在应用程序的清单文件中声明一个组件时 ,可以有选择包含意图过滤器,意图过滤器表明了组件对来自其他程序的意图进行反应的能力。可以通过添加一个lt;intent-filtergt;元素作为子元素来为应用程序声明一个意图过滤器。

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


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

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

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