android开发基础(Android Application Fundamentals)

应用基础

快速查看

  • Android应用程序是由一个或多个应用程序组件(活动,服务,内容提供商和广播接收器)
  • 每一个组件执行一个应用程序的行为在总体不一样的角色,并且每个能够单独启动(甚至由其余应用程序)
  • 清单文件必须申报程序中的全部组件,并应申报全部的应用需求,如所需的最低版本的Android和任何硬件配置的要求,
  • 非代码应用程序资源(图像,字符串,布局文件等),应包括对不一样的设备配置方案(如不一样语言,不一样的布局不一样的字符串不一样屏幕尺寸)

在这份文件

  1. 应用程序组件
    1. 激活组件
  2. 该清单文件
    1. 声明组件
    2. 声明应用需求
  3. 应用程序资源

在Java编程语言编写的Android应用程序的Android的SDK工具编译代码以及与任何数据和到一个Android的包,一个归档文件档案资源的.apk后缀,全部的在一个单一的代码.apk文件被认为是一个应用程序,是Android的文件,供电设备来安装应用程序。 html

一旦安装在设备上,每一个Android应用程序的生命在它本身的安全沙箱: java

  • 而Android操做系统是一个多用户Linux系统中,每一个应用程序是一个不一样的用户。
  • 默认状况下,每一个应用程序的系统分配一个惟一的Linux用户ID(该ID仅用于由系统是未知的应用程序),系统设置全部的应用程序中的文件权限,以便只有用户ID分配给该应用程序能够访问它们。
  • 每一个进程都有它本身的虚拟机(VM),所以应用程序的代码在从其余应用程序隔离运行。
  • 默认状况下,每一个应用程序运行在它本身的Linux进程。Android的启动过程时,应用程序的任何组件须要被执行,而后关闭该进程时,它再也不须要或恢复时,系统必须为其余应用程序的内存。

这样一来,Android系统实现了最小特权原则,也就是说,每一个应用程序,默认状况下,只能访问的组件,它须要作的工做,没有更多,这将建立一个很是安全的环境,使应用程序没法访问的,这就是它没有给予许可制度的部分。 android

可是,有一个应用程序的方法与其余应用程序和应用程序访问系统服务的数据: 数据库

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

这涵盖了基本就如何Android应用程序在系统中存在这个文件的其他部分向您介绍: 编程

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

应用程序组件

应 用组件是一个Android应用程序的基石,每一个组件是一个不一样的点,经过该系统能够输入您的应用程序,并不是全部组件都为用户和一些依赖于对方实际的切入 点,但每个做为它的存在本身的实体,起着特定的做用,每个都是一个独特的建筑块,帮助肯定您的应用程序的总体行为。 api

有四种不一样类型的应用程序组件,每一个类型提供不一样的目的,具备明显的生命周期定义了组件的建立和销毁。 安全

下面是应用程序组件的四种类型: 网络

活动
一个活动是一个带有用户界面的单一屏幕,例如,电子邮件应用程序可能有一个活动,展现了新的电子邮件列表,另外一个活动,撰写电子邮件,阅读电子邮件和另外一个活动 ,虽然活动的工做在一块儿,造成在电子邮件应用程序中有凝聚力的用户体验,每个都是独立的人,所以,不一样的应用程序能够启动任何这些活动之一(若是容许它 的电子邮件应用程序),例如,一个摄像头应用程序能够启动活动电子邮件应用程序,组成新的邮件,为了使用户可以共享图片。

一个活动是做为一个子Activity ,并能够学到更多关于它的活动的开发指南。 app

服务
服务是一种组件,它在后台执行长时间运行的操做或执行对远程进程的工做运行。 服务不提供用户界面,例如, 服务可能会在后台播放音乐,而用户在为不一样的应用,也可能取不阻塞用户与互动活动在网络上的数据的另外一个组成部分,如活动,能够启动服务,让它运行或绑定到它以交互。

一个服务实现为一个子类Service ,你能够了解它更多的服务开发指南。 框架

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

用于读取和写入数据的有用的内容提供商也在私下是否是你的应用和共享。例如, 记事本样本内容提供商保存使用应用笔记。

内容提供商是做为一个子类ContentProvider必须执行一个标准的API集,使其余应用程序来执行交易。欲了解更多信息,请参阅内容提供商开发指南。

广播接收器
一个广播接收器是一个组件,响应全系统的广播通知,许多来自广播系统,例如, 广播宣布,该屏幕已关闭,电池低,或图片被抓获。应用程序还能够启动广播,例如,让一些其余数据应用程序知道已下载到设备,并提供给他们使用,虽然不显示用户界面的广播接收器,可能他们建立一个状态栏的通知 ,提醒用户当广播事件发生时,更常见的是,虽然,广播接收器只是一个“网关”到其余组件,目的是作了很是少许的工做,例如,它可能会启动一个服务来执行对事件的一些工做。

一个广播是做为一个接收器子BroadcastReceiver和每一个广播还做为一项Intent对象。更多信息,请参阅BroadcastReceiver类。

一 个Android系统的设计独特之处是,任何应用程序能够启动另外一个应用程序的组件,例如,若是但愿用户可以捕获与设备上的照相机照片,有多是另外一种应 用程序,这是否和您的应用程序可使用它,而不是发展活动捕捉本身的照片,你没必要归入甚至连接从相机应用程序代码,相反,你能够简单地启动应用程序,在相 机捕捉照片的活动,当完成后,照片甚至退回到您的应用程序,以便您可使用它。对于用户来讲,它好像相机其实是一个应用程序的一部分。

当 系统启动一个组成部分,它启动该应用程序的进程(若是它还没有运行),并实例化该组件所须要的类,例如,若是你的应用程序启动相机中的应用程序的活动,捕捉 的照片,该活动运行在应用过程当中属于相机,在你的应用程序的进程没有,所以,与大多数其余的系统上应用,Android应用程序没有一个单一的入口点(有 没有main()函数,例如)。

因为系统运行中的每个与文件权限限制访问其余应用程序分离过程当中的应用,应用程序不能直接激活从另外一个应用程序组件的Android系统,不过,能够的。所以,要激活另外一个应用程序组件,您必须提供一个信息系统,指定你的意图 ,以启动特定组成部分,系统将激活你的组成部分。

激活组件

四个组件类型,活动,服务和广 播接收器三,是激活一个异步消息称为意图。意图结合各个组件在运行时向对方(你能够认为它们的信使,请求采起行动的其余组件),组件是否属于您的应用程序或另外一个。

目的是创建一个与Intent对象,它激活要么定义到一个特定的组件类型或特定组件的消息的意图,能够是显式或隐式的,分别。

对 于活动和服务,意图定义了要执行的操做(例如,“意见”或“送”的东西),可能指定数据URI采起行动(在其余事情,正在启动的组件可能须要知道),例 如,一个意图可能传达了一个活动,以显示图像或打开一个网页的请求,在某些状况下,能够启动一个活动,收到一个结果,在这种状况下,该项活动同时在返回结 果an Intent (例如,故意让你选择一个问题能够用户和我的联系您有它返回到返回,指向所选择的意向包括联系URI)。

对于广播接收器,其目的只是定义了公告正在播出的(例如,广播指示装置的电池低只包括已知的操做字符串,表示“电池电量低”)。

其余组件类型,内容提供商,没有激活的意图,相反,它被激活时,由来自请求的目标ContentResolver ,内容解析器处理与内容提供商的全部直接交易,使该元件的执行与供应商没有按交易“T须要的方法,而是在通话ContentResolver对象。这使得内容提供商之间的抽象请求信息和组件(保安局)层。

有对activiting每一个组件类型不一样的方法:

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

该清单文件

开始前能够一个Android应用程序组件系统,该系统必须知道,应用程序的组件经过阅读存在AndroidManifest.xml文件(如下简称“清单”文件)。应用程序必须声明该文件及其全部组成部分,必须在根目录的应用程序项目。

该清单作了的事情,除了宣布该应用程序的组件,如号码:

  • 找出任何用户权限的应用要求,如上网或读访问用户的联系人。
  • 声明的最低空气污染水平的应用要求,应用基础上的使用的API。
  • 声明所使用或应用程序,如照相机,蓝牙服务,或者多点触摸屏幕所需的硬件和软件功能。
  • API须要对应用程序联系起来库(比其余的Android框架API),如, 谷歌地图图书馆
  • 而更多的

声明组件

该清单的首要任务是了解应用程序的组件系统,例如,清单文件能够声明一个活动以下:

<?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>元素, android:icon属性指向资源标识的图标应用程序。

<activity>元素, android:name属性指定的彻底限定类名Activity子和android:label指定一个字符串用做活动的用户可见的标签属性。

你必须申报全部的应用程序组件是这样的:

活动,服务和内容提供商,你包括在您的来源,但不申报清单是不可见的系统,所以,不能运行,但广播接收器能够是宣布在清单或在代码中建立动态(如BroadcastReceiver对象),并经过调用系统中注册registerReceiver()

如何结构有关您的应用程序清单文件的更多信息,请参阅的AndroidManifest.xml文件的文档。

声明组件功能

上述讨论,在激活组件 ,你能使用Intent ,开始活动,服务和广 播接收器,您能够经过显式命名目标组件的意图(使用组件类名),不过,真正的权力的意图在于意图行动的概念。意图的行动,你简单地描述了操做类型要执 行(和可选的数据时,你要执行的动做),并容许系统上找到一个组件该设备能够执行的行动和启动它,若是有多个组件,能够经过意图描述的动做,而后用户选择 使用哪个。

该方法的系统识别组件,能够应付的意图是经过比较接收到的意图,在设备上的其余应用程序的清单文件中提供的过滤器的意图。

当你声明一个应用程序的清单组件,您能够选择意向包括组件的过滤器,从而宣布从应用程序能够响应其余意图给它的功能,你能够声明由添加为你的组件的意图过滤器<intent-filter>元素做为组件的声明元素的子元素。

例如,一个具备活动为撰写新的电子邮件地址的应用程序可能在其申报清单条目的意图过滤器响应“送”意图(以发送电子邮件)。一个应用程序中的活动能够建立与意图“送”行动( ACTION_SEND ),相匹配的系统中的应用电子邮件“发送”当你调用它推出的活动,并与意图startActivity()

建立更多的有关过滤器的意图,见意图和意图过滤器文件。

声明应用需求

有 许多搭载Android,而不是他们都提供相同的特性和功能的各类设备,为了防止在设备缺少你的应用程序所需的功能安装的应用程序,这是重要的,你清楚地 定义一个配置文件设备的应用程序申报的设备和软件要求您的清单文件类型的支持,这些声明的大部分都是仅供参考,系统不会阅读,但如Android市场对外 服务作阅读,以便为用户提供过滤时他们寻找他们的设备应用程序。

例如,若是您的应用程序须要一个摄像头和采用Android API的推出在2.1( 级API七),您应申报根据这些要求,在您的文件清单,这样, 没有一个摄像头和设备,有一个Android版 本低于 2.1没法安装从Android Market应用程序。

可是,您也能够声明,您的应用程序使用的相机,但并不须要它,在这种状况下,应用程序必须执行在运行时检查,以肯定该设备有一个摄像头,并禁用任何功能使用的相机,若是一个是不可用。

下面是一些重要设备的特色,你应该考虑你的设计和开发应用程序的一些:

屏幕尺寸和密度
为了他们的屏幕类型分类的设备,Android的定义为每一个设备两个特色:屏幕尺寸(屏幕的物理尺寸)和屏幕密度(在屏幕上的物理像素密度或每英寸的DPI点)。为了简化全部的屏幕配置不一样类型,Android系统归纳,使它们更容易进入到目标选择组中。

屏幕尺寸:小,正常,大,特大。
屏幕密度为:低密度,中密度,高密度和超高密度。

默认状况下,应用程序与全部兼容的屏幕尺寸和密度,由于Android系统使您的用户界面布局和图像资源进行适当的调整,可是,你要创造必定的专业布局和屏幕尺寸为某些专门的图像密度,使用资源替代的布局,并经过声明的表现彻底在您的应用程序支持的屏幕尺寸<supports-screens>元素。

欲了解更多信息,请参阅支持多个屏幕上的文档。

输入配置
器件提供了许多不一样的用户投入机制,如硬件键盘,轨迹球或五维导航键盘类型,若是你的应用须要输入特定类型的硬件,那么你应该在你的清单DECLARE与IT <uses-configuration>元素,但它是一个应用程序的某些稀有应要求配置输入。
设备功能
有 许多硬件和软件功能,可能会或可能不存在于一个给定的Android系统的设备,如摄像头,光线感应器,蓝牙,某些版本的OpenGL,或触摸屏的保 真度,你不该该假定必定是一个功能上的全部Android供电设备(比标准库Android的可用性等)可用,所以应该宣布您的应用程序使用的任何功能<uses-feature>元素。
平台版本
不一样的Android系统的设备一般运行不一样版本的Android平台,如Android 1.6或Android 2.3,每个后续版本一般包括额外的API没有在之前的版本,为了代表这组API可用,每一个平台版本指定API级别 (例如,是Android 1.0的Android 2.3 API API Level 1和Level九)若是您使用任何平台的API被添加到1.0版后,您应申报级别的API,其中最低者为宣传短片引进使用<uses-sdk>元素。

重要的是,你声明你的应用程序的全部这些要求,由于,当您发布在Android市场的应用,市场使用这些声明,以过滤器应用在每一个设备上可用的,所以,您的应用程序应该只提供给设备,以知足全部的应用需求。

有关在如何在这些过滤器(和其余)的要求为基础的Android市场应用更多的信息,请参阅市场过滤器文件。

应用程序资源

Android应用程序是由不只仅是代码,它须要的资源,从源代码分开,如图像,音频文件,以及任何有关应用程序的视觉表现,例如,你应该定义动画,菜 单,多款式,颜色,以及与XML文件活动的用户界面布局,使用应用程序资源能够很容易地更新,而无需修改代码,并逐台提供替代资源,能够优化各类应用程序 的应用程序的不一样特色设备配置(如不一样语言和屏幕尺寸等)。

对于每个资源,你在你的Android项目包括,SDK构建工具定义一个惟一的整数ID,您能够用它来参考您的应用程序代码或从XML中定义的其余资源的资源,例如,若是应用程序包含一个图像文件名 为logo.png (在保存的res/drawable/目录),命名为SDK工具生成资源ID R.drawable.logo ,您可使用引用图像并将其插入您的用户界面。

资源的提供从源代码分开的最重要方面之一是可以为你提供不一样的设备配置替代资源,例如,经过定义XML UI字符串,你能够翻译成其余语言的字符串,并保存这些字符串在不一样的文件,而后根据语言限定符您追加到资源目录的名称(如res/values-fr/法国字符串值)和用户的语言设置,Android系统应用适当的语言串到你的用户界面。

Android支持你的许多不一样的替代资源预选赛的 资格赛是一个简短的字符串,你在你的资源目录的名称包括以定义设备配置这些资源应该被使用。另外一个例子是,你要常常创造不一样为您的活动布局,在设备的屏幕 方向和大小而定,例如,当手机屏幕纵向(高),你可能须要一个按钮是垂直布局,可是当屏幕横向的(宽),按钮应水平对齐。改变布局的方向而定,你能够定义 两个不一样的布局和应用适当的限定每一个布局的目录名,而后,系统会自动应用相应的布局对当前设备的方向而定。

有关更多的资源的不一样种类能够包含在您的应用和如何建立不一样的器件配置替代资源,请参阅资源应用程序开发指南。

相关文章
相关标签/搜索