在Java编程语言编写的Android应用程序的Android的SDK工具编译代码以及与任何数据和到一个Android的包,一个归档文件档案资源的.apk
后缀,所有的在一个单一的代码.apk
文件被认为是一个应用程序,是Android的文件,供电设备来安装应用程序。
一旦安装在设备上,每个Android应用程序的生命在它自己的安全沙箱:
这样一来,Android系统实现了最小特权原则,也就是说,每个应用程序,默认情况下,只能访问的组件,它需要做的工作,没有更多,这将创建一个非常安全的环境,使应用程序无法访问的,这就是它没有给予许可制度的部分。
但是,有一个应用程序的方法与其他应用程序和应用程序访问系统服务的数据:
这涵盖了基本就如何Android应用程序在系统中存在这个文件的其余部分向您介绍:
应 用组件是一个Android应用程序的基石,每个组件是一个不同的点,通过该系统可以输入您的应用程序,并非所有组件都为用户和一些依赖于对方实际的切入 点,但每一个作为它的存在自己的实体,起着特定的作用,每一个都是一个独特的建筑块,帮助确定您的应用程序的整体行为。
有四种不同类型的应用程序组件,每个类型提供不同的目的,具有明显的生命周期定义了组件的创建和销毁。
下面是应用程序组件的四种类型:
一个活动是作为一个子Activity
,并可以学到更多关于它的活动的开发指南。
一个服务实现为一个子类Service
,你可以了解它更多的服务开发指南。
ContactsContract.Data
)读取和写人特定的信息。
用于读取和写入数据的有用的内容提供商也在私下是不是你的应用和共享。例如, 记事本样本内容提供商保存使用应用笔记。
内容提供商是作为一个子类ContentProvider
必须执行一个标准的API集,使其他应用程序来执行交易。欲了解更多信息,请参阅内容提供商开发指南。
一个广播是作为一个接收器子BroadcastReceiver
和每个广播还作为一项Intent
对象。更多信息,请参阅BroadcastReceiver
类。
一 个Android系统的设计独特之处是,任何应用程序可以启动另一个应用程序的组件,例如,如果希望用户能够捕获与设备上的照相机照片,有可能是另一种应 用程序,这是否和您的应用程序可以使用它,而不是发展活动捕捉自己的照片,你不必纳入甚至链接从相机应用程序代码,相反,你可以简单地启动应用程序,在相 机捕捉照片的活动,当完成后,照片甚至退回到您的应用程序,以便您可以使用它。对于用户来说,它好像相机实际上是一个应用程序的一部分。
当 系统启动一个组成部分,它启动该应用程序的进程(如果它尚未运行),并实例化该组件所需要的类,例如,如果你的应用程序启动相机中的应用程序的活动,捕捉 的照片,该活动运行在应用过程中属于相机,在你的应用程序的进程没有,因此,与大多数其他的系统上应用,Android应用程序没有一个单一的入口点(有 没有main()
函数,例如)。
由于系统运行中的每一个与文件权限限制访问其他应用程序分离过程中的应用,应用程序不能直接激活从另一个应用程序组件的Android系统,不过,可以的。因此,要激活另一个应用程序组件,您必须提供一个信息系统,指定你的意图 ,以启动特定组成部分,系统将激活你的组成部分。
四个组件类型,活动,服务和广 播接收器三,是激活一个异步消息称为意图。意图结合各个组件在运行时向对方(你可以认为它们的信使,请求采取行动的其他组件),组件是否属于您的应用程序或另一个。
目的是建立一个与Intent
对象,它激活要么定义到一个特定的组件类型或特定组件的消息的意图,可以是显式或隐式的,分别。
对 于活动和服务,意图定义了要执行的操作(例如,“意见”或“送”的东西),可能指定数据URI采取行动(在其他事情,正在启动的组件可能需要知道),例 如,一个意图可能传达了一个活动,以显示图像或打开一个网页的请求,在某些情况下,可以启动一个活动,收到一个结果,在这种情况下,该项活动同时在返回结 果anIntent
(例如,故意让你选择一个问题可以用户和个人联系您有它返回到返回,指向所选择的意向包括联系URI)。
对于广播接收器,其目的只是定义了公告正在播出的(例如,广播指示装置的电池低只包括已知的操作字符串,表示“电池电量低”)。
其他组件类型,内容提供商,没有激活的意图,相反,它被激活时,由来自请求的目标ContentResolver
,内容解析器处理与内容提供商的所有直接交易,使该元件的执行与供应商没有按交易“T需要的方法,而是在通话ContentResolver
对象。这使得内容提供商之间的抽象请求信息和组件(保安局)层。
有对activiting每个组件类型不同的方法:
Intent
到startActivity()
或startActivityForResult()
当你想返回结果的活动)。Intent
到startService()
或者也可以由BIND传递到服务Intent
到bindService()
Intent
喜欢的方法sendBroadcast()
sendOrderedBroadcast()
或sendStickyBroadcast()
query()
在ContentResolver
。如需使用意向信息,请参阅意图和意图过滤器文件更多关于激活特定组件的信息,另外在提供下列文件:。 活动 , 服务 , BroadcastReceiver
和内容提供商 。
开始前可以一个Android应用程序组件系统,该系统必须知道,应用程序的组件通过阅读存在AndroidManifest.xml
文件(以下简称“清单”文件)。应用程序必须声明该文件及其所有组成部分,必须在根目录的应用程序项目。
该清单做了的事情,除了宣布该应用程序的组件,如号码:
该清单的首要任务是了解应用程序的组件系统,例如,清单文件可以声明一个活动如下:
<?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
指定一个字符串用作活动的用户可见的标签属性。
你必须申报所有的应用程序组件是这样的:
<activity>
的活动元素<service>
的服务元素<receiver>
广播接收器元件<provider>
为内容提供商元素活动,服务和内容提供商,你包括在您的来源,但不申报清单是不可见的系统,因此,不能运行,但广播接收器可以是宣布在清单或在代码中创建动态(如BroadcastReceiver
对象),并通过调用系统中注册registerReceiver()
如何结构有关您的应用程序清单文件的更多信息,请参阅的AndroidManifest.xml文件的文档。
上述讨论,在激活组件 ,你能使用Intent
,开始活动,服务和广 播接收器,您可以通过显式命名目标组件的意图(使用组件类名),不过,真正的权力的意图在于意图行动的概念。意图的行动,你简单地描述了操作类型要执 行(和可选的数据时,你要执行的动作),并允许系统上找到一个组件该设备可以执行的行动和启动它,如果有多个组件,可以通过意图描述的动作,然后用户选择 使用哪一个。
该方法的系统识别组件,可以应付的意图是通过比较接收到的意图,在设备上的其他应用程序的清单文件中提供的过滤器的意图。
当你声明一个应用程序的清单组件,您可以选择意向包括组件的过滤器,从而宣布从应用程序可以响应其他意图给它的功能,你可以声明由添加为你的组件的意图过滤器<intent-filter>
元素作为组件的声明元素的子元素。
例如,一个具有活动为撰写新的电子邮件地址的应用程序可能在其申报清单条目的意图过滤器响应“送”意图(以发送电子邮件)。一个应用程序中的活动可以创建与意图“送”行动( ACTION_SEND
),相匹配的系统中的应用电子邮件“发送”当你调用它推出的活动,并与意图startActivity()
创建更多的有关过滤器的意图,见意图和意图过滤器文件。
有 许多搭载Android,而不是他们都提供相同的特性和功能的各种设备,为了防止在设备缺乏你的应用程序所需的功能安装的应用程序,这是重要的,你清楚地 定义一个配置文件设备的应用程序申报的设备和软件要求您的清单文件类型的支持,这些声明的大部分都是仅供参考,系统不会阅读,但如Android市场对外 服务做阅读,以便为用户提供过滤时他们寻找他们的设备应用程序。
例如,如果您的应用程序需要一个摄像头和采用Android API的推出在2.1( 级API七),您应申报根据这些要求,在您的文件清单,这样, 没有一个摄像头和设备,有一个Android版 本低于 2.1无法安装从Android Market应用程序。
但是,您也可以声明,您的应用程序使用的相机,但并不需要它,在这种情况下,应用程序必须执行在运行时检查,以确定该设备有一个摄像头,并禁用任何功能使用的相机,如果一个是不可用。
下面是一些重要设备的特点,你应该考虑你的设计和开发应用程序的一些:
屏幕尺寸:小,正常,大,特大。
屏幕密度为:低密度,中密度,高密度和超高密度。
默认情况下,应用程序与所有兼容的屏幕尺寸和密度,因为Android系统使您的用户界面布局和图像资源进行适当的调整,但是,你要创造一定的专业布局和屏幕尺寸为某些专门的图像密度,使用资源替代的布局,并通过声明的表现完全在您的应用程序支持的屏幕尺寸<supports-screens>
元素。
欲了解更多信息,请参阅支持多个屏幕上的文档。
<uses-configuration>
元素,但它是一个应用程序的某些稀有应要求配置输入。
<uses-feature>
元素。
<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支持你的许多不同的替代资源预选赛的 资格赛是一个简短的字符串,你在你的资源目录的名称包括以定义设备配置这些资源应该被使用。另一个例子是,你要经常创造不同为您的活动布局,在设备的屏幕 方向和大小而定,例如,当手机屏幕纵向(高),你可能需要一个按钮是垂直布局,但是当屏幕横向的(宽),按钮应水平对齐。改变布局的方向而定,你可以定义 两个不同的布局和应用适当的限定每个布局的目录名,然后,系统会自动应用相应的布局对当前设备的方向而定。
有关更多的资源的不同种类可以包含在您的应用和如何创建不同的器件配置替代资源,请参阅资源应用程序开发指南。