登录

  • 登录
  • 忘记密码?点击找回

注册

  • 获取手机验证码 60
  • 注册

找回密码

  • 获取手机验证码60
  • 找回
毕业论文网 > 外文翻译 > 电子信息类 > 电子信息科学与技术 > 正文

安卓应用基础外文翻译资料

 2023-03-05 05:03  

安卓应用基础

安卓应用程序是用java语言编写的。安卓sdk工具编译包中的代码,以及所有的数据和资源文件,得到一个apk为后缀的归档文件。Apk文件被认为是一个应用程序,安卓设备依赖于这样的文件来安装应用程序。

一旦安装在设备上,每个Android应用程序的生命在它自己的安全沙箱:而Android操作系统是一个多用户Linux系统中,每个应用程序是一个不同的用户。

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

每个进程都有它自己的虚拟机(VM),因此应用程序的代码与其他应用程序隔离运行。默认情况下,每个应用程序运行在它自己的Linux进程。当应用程序的任何组件需要被执行时,Android会启动他们;当应用程序不再需要时,Android便会关闭他们的进程,以恢复内存供其他应用程序使用。

这样一来,Android系统实现了最小特权原则,也就是说,每个应用程序,默认情况下,只能访问他需要工作的组件而不会有其他,这将创建一个非常安全的环境,使应用程序无法访问系统没有给予许可制度的部分。

但是,应用程序有一些方法可以和其他应用程序以及系统服务交换数据:两个应用程序公用一个Linux用户ID是可以的,在这样的情况下,它们能够相互访问的文件。为了节约使用相同的用户ID系统资源,应用程序还可以安排运行在相同的Linux进程和共享同一个VM(应用也必须使用相同的证书签名)。应用程序可以请求访问权限,如用户的联系人,短信,可安装存储(SD卡),摄像头,蓝牙等设备的数据,所有应用程序的权限必须由用户在安装时授予。

以上包括了关于应用程序如何在Android系统中运作的基本知识,本文档剩下的部分将向您介绍一下内容:

  1. 定义一个程序的核心框架组件。
  2. 声明组件和应用程序所需的设备功能的清单文件。
  3. 资源与应用代码是分开的,允许应用程序针对不同的设备配置进行优化。
  4. 应用程序组件(Application Components)

Android的核心功能之一就是一个应用程序可以使用其它应用程序的元素(如果那个应用程序允许的话)。比如说,如果你的应用程序需要一个图片卷动列表,而另一个应用程序已经开发了一个合用的而又允许别人使用的话,你可以直接调用那个卷动列表来完成工作,而不用自己再开发一个。你的应用程序并没有复制或吸纳其它应用程序的代码,它只是在有需求的时候启动了其它应用程序的那个功能部分。

为达到这个目的,系统必须在一个应用程序的一部分被需要时启动这个应用程序,并将那个部分的Java对象实例化。与在其它系统上的应用程序不同,Android应用程序没有为应用准备一个单独的程序入口(比如说,没有main()方法), 而是为系统依照需求实例化提供了基本的组件。共有四种组件类型:

活动(Activities):

一个 activity代表用户界面的一个独立屏幕。例如,一个邮件应用程序应该有一个activity用于显示新邮件列表,另一个activity用于撰写一封邮件,还有一个activity用于读取邮件。尽管所有activitie协同工作以构成邮件应用程序的用户体验,但彼此之间相对独立。应次,不同的应用程序能够从任何一个activity启动 (只要邮件应用程序允许)。例如,用户需要分享一张照片,一个拍照应用程序能够启动邮件应用程序的activity。activity是一个实现了Activity的子类,你可以在 Activity开发者指导部分了解更多。

服务(Services):

service是在后台运行,执行长时间操作或者执行远程操作。service不提供用户界面。例如,当用户在另一个应用程序时,一个service 可在后台播放音乐,或者是从网络上获取数据,而不阻断用户与当前activity 的交互。其他组件,比如一个activity,为了与该service 互动,可以启动或者绑定它。service是一个实现了Service 的子类,你可以在Service 开发者指导部分了解更多。

内容提供者(Content providers):

内容提供者将一些特定的应用程序数据供给其它应用程序使用。数据可以存储于文件系统、SQLite数据库或其它方式。内容提供者继承于ContentProvider 基类,为其它应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个ContentResolver 对象,调用它的方法作为替代。ContentResolver可以与任意内容提供者进行会话,与其合作来对所有相关交互通讯进行管理。参阅内容提供者ContentProvider章节获得更多关于使用内容提供者的内容。

Android系统设计的一个独特的方面在于任何应用程序都可以开始另一个应用程序的组件。打个比方,你想让你的应用程序使用设备的相机来拍一张照片,如果已经油了可以实现它的程序并且你拥有使用的权限,你就不必在创建一个新的activity来拍照片。你不必去包含或者链接这个拍照程序。相反的,你可以轻易地打开这个照相程序中的activity来拍一张照片。当拍完之后,照片甚至会直接返回给你的应用程序让你可以使用它。对于使用者来说,这仿佛看起来就像相机是你的应用的一部分。

当系统启动一个组件之后,它将为这个程序开辟一个进程(如果这个程序没有在运行的话),并初始化这个进程所需要的相关类。例如说,你的应用程序在照相程序中开启了一个activity来拍摄照片,这个activity是运行在属于相机程序的进程之中而不是在你的应用的进程之中。因此,不像大多数其它系统的程序,安卓程序没有一个单独的入口点(没有类似main()函数的功能)。

因为系统中的程序运行在自己独立的进程中,并且程序对其他程序的访问有权限限制,所以你的程序不能直接激活其他程序中的组件。但是android系统就可以。具体的实现是这样的,为了激活另一个程序的组件,你必须发送一个消息给系统来说明你的意图,然后系统为你激活这个组件。

激活组件(Activating Components):

四大组件中的三个——activity,service和broadcast receivers是由一种叫intent的异步消息来激活的。Intents将独立的组件绑定在一起(你可以将这些intents看作激活其他组件所需要的messengers),不管这些组件属不属于你的程序。

一个intent就是一个Intent对象,这个intent定义了一种可以激活(activate)某个特定组件或者某种特定类型的组件,这两种情况分别对应两种intent的定义方式或者显示的或者隐式的。

对于activities和services,一个intent定义了要执行的操作(action)(比如,要“view”或者“send”什么)和要操作的数据的URI。比如,一个intent可能会为一个activity传递一个请求来展示一张图片或者打开一个网页。有时,你可以启动一个activity来得到返回的结果,在这个例子中这个activity的返回的结果也是一个Intent(比如,你可以发送一个intent让用户选择一个personal contact并返回给你——这个返回的intent就包含了一个指向用户选择的联系人的URI)。(关于activity和service的启动方式,下面将介绍。)

对于broadcast receiver来说,intent只是简单的定义了要广播的内容(比如,一个用以表明电池电量很低的广播仅包含了一个表明电池电量很低的字符串)。

最后一种组件类型content provider并不是由intent来激活的activate)。而是由接收到ContentResolver的请求时激活的。他们都有各自的方法来激活不同类型的组件。你可以通过传递一个Intent给startActivity()或startActivityForResult()启动一个activity(或者给他一些新的事情去做)。使用startActivityForResult()你会得到一个返回结果;你可以通过传递给Intent一个startService()来开始一个service或者给一个正在运行的service新的指令。你可以可以将不同的service绑定起来通过传递给Intent一个bindService();你可以通过传递一个Intent给诸如sendBroadcast()、sendOrderedBroadcast()或者sendStickyBroadcast()等方法来初始化一个广播你可以通过调用ContentResolver的query()方法来执行一次content provider的查询操作。

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

组件声明(Declaring components)

Manifest文件的首要任务就是通知系统关于程序中要使用的组件。比如,一个manifest文件可以用如下的方式来声明一个activity:

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属性用于指定一个用于标示该程序的icon。

在lt;activitygt;元素中,android:name属性用于确定这个扩展自Activity的子类的全路径名,android:label属性用于标示这个activity的对于用户可见的label。

你必须要用以下方式来声明你的程序组件:

activities:lt;activitygt;标签

services:lt;servicegt;标签

broadcast receiver:lt;receivergt;标签

content providers:lt;providergt;标签

在你的资源中但没有在mainfest中声明的activities、services和content providers,这些组件将不会被系统所识别,因此,也就不能运行。然而,broadcast receiver既可以manifest文件中声明也可以在代码中动态创建(例如创建BroadcastReceiver对象),并通过调用registerReceiver()在系统中注册。

声明组件的能力(Declaring components capabilities)

正如上文所讨论的,在Activating Components中,可以使用一个Intent来启动activities、services和broadcast receiver。你可以通过在intent中注明目标组件的名字(使用的是组件的类名)来显示的启动组件。然而,intents真正强大的地方在与关于intent的actions的概念。通过intent的actions,你可以简单的描述你要执行的操作的类型(并且可以有选择的描述你要处理的数据),可以允许系统在device中找到这个组件并启动它。如果有多个组件可以执行intent中描述的action,这时用户就可以选择一个来执行。

系统可以识别一些能对intent做出反应的组件,通过将接收到的intent和设备中其他程序的manifest文件的intent filters进行比较来实现的。

当你在你的程序的mainfest文件中声明了一个组件后,你可以选择包含intent fliter,这样可以表明组件对接收自其他程序的intent做出反应的能力。你可以通过添加一个lt;intent-filtergt;元素作为组件声明元素的子类来为你的程序声明一个intent filter。

比如,在一个邮件程序中的一个activity可以编写新的邮件,这样的话你就需要在manifest文件中来声明一个intent filter来对“发送”intent响应(为了发送邮件)。这样,在你的程序中,一个activity就可以创

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


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

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

企业微信

Copyright © 2010-2022 毕业论文网 站点地图