android介绍及四大组件说明。。

来源:互联网 发布:福建师范大学网络电视 编辑:程序博客网 时间:2024/04/28 02:20

应用基础


Android应用程序是用Java编程语言。在Android SDK工具编译你的代码,以及任何数据和资源文件-成APK:一个Android包,这是一个存档文件的apk。后缀。一个APK文件包含了一个Android应用程序的所有内容,是Android平台的设备用于安装应用程序文件。

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

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

在这种方式中,Android系统实现了最小特权原则。也就是说,每个应用程序,默认情况下,只能访问到它需要做的工作并没有更多的组件。这将创建在其中一个应用程序不能访问它没有获得许可的系统部分一个非常安全的环境。

然而,有办法让一个应用程序与其他应用程序和一个应用程序共享数据访问系统服务:

  • 它可以安排两个应用程序共享相同的Linux用户ID,在这种情况下,他们能够访问对方的文件。为了节省系统资源,应用程序使用相同的用户ID也可以安排在同一个Linux进程运行,并共享相同的VM(即应用程序也必须使用相同的证书签名)。
  • 一个应用程序可以请求允许访问设备数据,例如用户的联系人,短信,可安装存储(SD卡),摄像头,蓝牙,等等。所有的应用程序的权限,必须授予在安装时用户。

这包括关于如何在系统中存在一个Android应用程序的基本知识。本文档的其余部分向您介绍:

  • 核心框架组件,定义你的应用程序。
  • 在声明组件和所需设备功能为您的应用程序清单文件。
  • 资源是独立于应用程序的代码,让你的应用程序,以优雅地优化其行为为各种设备配置。

应用程序组件


应用程序组件是一个Android应用程序的基本构造块。每个组件都是一个不同的角度,通过该系统可以进入你的应用程序。不是所有的组件都是实际的切入点,为用户和一些互相依赖的,但每一个存在作为自己的实体,扮演着特定的角色,每个人都是一个独特的建筑块,它可以帮助确定您的应用程序的整体行为。

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

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

活动
一个活动表示与用户界面的单个屏幕。例如,电子邮件应用程序可能有一个活动,显示新的电子邮件,另一个活动来撰写电子邮件,并阅读电子邮件另一个活动的清单。虽然活动一起形成在电子邮件应用程序一个有凝聚力的用户体验,每一个都是相互独立的。因此,不同的应用程序可以启动这些活动中的任何一个(如电子邮件应用程序允许的话)。例如,照相机的应用程序可以从该活动中的电子邮件应用程序,构成新的邮件,为了共享一个图像的用户。

活动被实现为一个子类的活动,你可以学习更多关于它的活动 开发人员指南。

服务
一个服务是运行在后台执行长时间运行的操作或执行工作远程进程的组成部分。一个服务不提供用户界面。例如,一个服务可能会播放音乐的背景,而用户在不同的应用程序,也可能获取在网络上的数据而不会阻塞用户交互的活动。另一个组成部分,如一项活动,可以启动该服务,并让它运行或绑定到它,以与它进行交互。

一个服务被实现为一个子类服务,你可以学习在关于它的更多服务开发人员指南。

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

内容提供商也可用于读取和写入的数据是私有的,您的应用程序,而不是共享有用的。例如,记事示例应用程序使用一个内容提供商,以保存笔记。

内容提供者被实现为一个子类的ContentProvider 和必须实现一组标准的API,使其他应用程序来执行交易。欲了解更多信息,请参阅内容提供商开发人员指南。

广播接收机
一个广播接收器是响应系统范围的广播公告的组成部分。许多广播从系统,例如,广播宣布,该显示屏已经关闭,电池电量低或图片被抓获起源。应用程序也可以发起广播,例如,让其他应用程序知道某些数据已经被下载到设备上,可供他们使用。虽然广播接收机不显示用户界面,它们可以创建一个状态栏通知 时的广播事件发生时,以提醒用户。更常见的是,虽然,在广播接收器仅仅是一个“网关”到其他元件,是为了做工作的一个非常小的量。例如,它可能会启动一个服务来执行基于事件的一些工作。

一种广播接收器被实现为一个子类BroadcastReceiver的 和每个广播递送作为意图对象。欲了解更多信息,请参见BroadcastReceiver的类。

的Andr​​oid系统设计的一个独特的方面是,任何应用程序可以启动另一个应用程序的组件。例如,如果你希望用户捕捉与设备相机拍照,有可能是另一个应用程序而不是开发活动给自己拍摄一张照片,这是否与您的应用程序可以使用它。你不需要把甚至从摄像头的应用程序链接到的代码。相反,你可以简单地启动相机应用程序,捕捉照片的活动。当完成后,照片甚至返回到您的应用程序,所以你可以使用它。对于用户来说,它好像相机实际上是你的应用程序的一部分。

当系统启动一个组件,它启动这些进程为应用程序(如果它尚未运行),并实例化所需组件的类。例如,如果您的应用程序启动活动在相机应用程序,捕捉一张照片,该活动运行在属于相机的应用程序,而不是在你的应用程序的进程的进程。因此,不像其他大多数系统的应用程序,Android应用程序没有一个单一的入口点(没有的main()函数,例如)。

由于系统运行在与该限制访问其他应用程序文件的权限单独的流程中的每个应用程序,您的应用程序不能直接从另一个应用程序激活一个组成部分。Android系统,但是,可以。因此,要激活另一个应用程序的组件,则必须将邮件传递到系统指定你的意图来启动某个特定组件。然后,系统会激活你的组件。

激活组件

三四个组件类型,活动,服务和广 ​​播接收器,被称为异步消息激活的意图。意图单个组件相互结合在运行时(你可以把它们看作是请求来自其他组件的动作使者),该组件是否属于您的应用程序或其他。

意图是与建立意图对象,它定义了一个消息来激活一个特定的组件或特定类型的组件的意图可以是显式的或隐式的,分别为。

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

对于广播接收机,其目的只是定义正在播出的公布(例如,广播,表示该设备电池电量低时只包括已知的操作字符串,表示“电池电量低”)。

其它成分的类型,内容提供者,不被意图激活。相反,它是当通过从一个请求对象激活的ContentResolver。内容解析器处理与内容供应商的所有直接的交易,使该公司执行交易与提供的组件并不需要,而是调用的方法的ContentResolver对象。这使抽象的内容提供商和组分请求的信息(安全性)之间的层。

有用于激活每种类型的组件不同的方法:

  • 你可以开始一个活动(或给它一些新的东西做)通过传递一个意图的startActivity()startActivityForResult() (当你想活动的返回结果)。
  • 您可以启动一个服务(或给予新的指令来持续服务)通过传递一个意图的StartService() 。或者你也可以通过传递一个绑定到服务意向,以 bindService() 
  • 你可以通过传递一个启动的广播意图以类似方法 sendBroadcast() sendOrderedBroadcast() ,或sendStickyBroadcast() 
  • 你可以通过调用执行查询到内容提供商的query()的ContentResolver

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

清单文件


之前Android系统可以启动一个应用程序组件,系统必须知道组件存在通过读取应用程序的的AndroidManifest.xml文件(“清单”的文件)。您的应用程序必须申报其所有的组件在这个文件中,它必须在应用程序项目的根目录下。

清单做了一些东西,除了声明应用程序的组件,例如:

  • 识别任何用户权限的应用程序需要,比如上网或读访问用户的联系人。
  • 申报的最低API级别 的应用程序所需的,在此基础上的API的应用程序使用。
  • 声明由应用程序使用或需要的硬件和软件功能,如摄像头,蓝牙服务,或者多点触摸屏。
  • API库的应用程序必须对(比Android框架的API等),挂如谷歌地图的库。

声明组件

清单的首要任务是通知系统有关的应用程序的组件。举例来说,一个manifest文件可以按如下声明一个活动:

<?XML version = "1.0" encoding = "utf-8" ?> <manifest ... >     <application  android:icon = "@drawable/app_icon.png" ... >         <activity  android:name = "com.example.project.ExampleActivity"                   android:label = "@string/example_label" ... >         </activity>         ...     </application> </manifest>

的<application> 元素,该机器人:图标属性指向的资源用于标识应用程序的图标。

<activity>元素,该机器人:名称属性指定的完全限定类名的活动子和机器人:标签属性指定一个字符串作为该活动的用户可见的标签使用。

您必须声明所有的应用程序组件是这样的:

  • <activity>元素活动
  • 的<service>要素服务
  • <receiver>元素广播接收机
  • 的<provider>元素为内容提供商

活动,服务和内容提供商,你在你的源代码,包括但不要在清单中声明是不可见的系统,因此,不能运行。然而,广播接收器既可以在manifest或在代码中动态创建的声明(如 BroadcastReceiver的对象),并通过调用注册到系统 registerReceiver() 

欲了解更多有关如何构建manifest文件为您的应用程序,请参阅AndroidManifest.xml文件 文档。

声明组件的能力

如上所述,在激活的组件,你可以使用一个 意图,开始活动,服务和广 ​​播接收器。您可以通过显式命名目标组件(使用组件类名)的意图这样做。但是,意图的真正力量在于概念隐含的意图。一个隐含的意图简单地描述动作的类型来执行(和可选的数据时,你想要执行的操作),并允许系统找到可以执行的操作,并开始在设备上的组件。如果有可以执行由目的所描述的动作的多个组件,然后在用户选择使用哪一个。

系统识别,可以对意图做出反应的组件的方法是通过比较接收到的意图意图过滤器在设备上的其它应用程序的清单文件中提供。

当你在你的应用程序的清单中声明一个活动,您可以选择包括意图过滤器的申报活动的能力,因此它可以从其他应用程序到意图作出回应。您可以通过添加一个声明一个意图过滤器组件<intent-filter>元素作为组件的声明元素的子元素。

例如,如果你已经建立了与编写新电子邮件活动的电子邮件应用程序,你可以声明一个意图过滤器,以响应“发送”意图(以发送新邮件)所示:

<manifest ... >     ...     <application ... >         <activity  android:name = "com.example.project.ComposeEmailActivity" >             <intent-filter>                 <action  android:name = "android.intent.action.SEND"  />                 <data  android:type = "*/*"  />                 <category  android:name = "android.intent.category.DEFAULT"  />             </intent-filter>         </activity>     </application> </manifest>

然后,如果另一个应用程序的创建目的ACTION_SEND行动,并把它传递给的startActivity() ,该系统可以开始你的活动,以便用户可以起草和发送电子邮件。

欲了解更多有关创建意图过滤器,请参阅意图和意图过滤器文件。

声明应用程序要求

有多种设备搭载Android,而不是他们的所有提供相同的功能和能力。为了防止被安装在缺乏必要通过您的应用程序功能的设备的应用程序,这一点很重要,你清楚地定义配置文件中的设备类型的应用程序支持通过声明的设备和软件的要求在你的manifest文件。大多数这些声明是仅供参考,系统不会读取它们,但外部服务,如谷歌播放务必阅读它们,以提供过滤的用户在搜索从他们的设备的应用程序。

例如,如果你的应用程序需要一个摄像头,并使用了Android 2.1(API的推出API级别 7),你应该声明这些作为要求在你的manifest文件是这样的:

<manifest ... >     <uses-feature  android:name = "android.hardware.camera.any"                   android:required = "true"  />     <uses-sdk  android:minSdkVersion = "7"  android:targetSdkVersion = "19"  />     ... </manifest>

现在,那些设备不会有一个摄像头,并有一个Android版 ​​本比2.1不能从谷歌播放安装您的应用程序。

不过,您也可以声明你的应用程序使用相机,但并不 需要它。在这种情况下,您的应用程序必须设置必要的 属性为“假”,并检查在运行时,设备是否有一个摄像头,并禁用任何相机功能(如适用)。

如何你可以用不同的设备管理您的应用程序的兼容性的详细信息是在提供设备兼容性 文档。

应用程序资源


一个Android应用程序是由不仅仅是代码,它需要的资源是独立于源代码,如图像,音频文件,以及有关应用程序的视觉呈现任何内容。例如,你应该定义动画,菜单,样式,颜色,以及与XML文件的活动用户界面的布局。使用应用程序资源,可以很容易地更新你的应用程序的各种特性,而无需修改代码和 - 通过提供两套替代资源,使您能够优化你的应用程序,适用于各种设备配置(如不同的语言和屏幕大小)。

对于您在您的Android项目包括所有的资源,在SDK编译工具定义一个唯一的整 ​​数ID,你可以用它来 ​​从您的应用程序的代码或从XML中定义的其他资源引用资源。例如,如果您的应用程序包含一个名为映像文件logo.png(保存在RES /绘制/目录下),SDK工具生成一个名为资源ID R.drawable.logo,您可以用它来 ​​引用该 ​​图片并将其插入在用户界面中。

其中提供资源从源代码中分离出来的最重要的方面是能够让你为不同的设备配置提供可替代资源。例如,通过定义在XML中的UI字符串,可以转换字符串成其他语言,并保存这些字符串在单独的文件。然后,基于语言限定词 ,你附加到资源目录的名称(如RES /值-FR /法语字符串值)和用户的语言设置,Android系统应用相应的语言字符串到你的UI。

Android支持多种不同的限定词为你替代资源。限定符是您在资源目录的名称包括以定义的这些资源应该用于设备配置的短字符串。再举一个例子,你应该经常对你的活动创建不同的布局,这取决于设备的屏幕方向和大小。例如,当设备屏幕处于纵向(高),您可能希望一个有按钮的布局是垂直的,但是当屏幕处于横向(宽),按钮应水平对齐。要更改布局视方向,你可以定义两个不同的布局和应用适当的限定词,以每个版面的目录名。然后,系统将自动应用适当的布局取决于当前设备的方向。


0 0
原创粉丝点击