android开发基础(Android Application Fundamentals)

自古美人都是妖i 提交于 2019-12-05 22:12:08

应用基础

快速查看

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

在这份文件

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

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

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

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

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

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

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

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

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

应用程序组件

应 用组件是一个Android应用程序的基石,每个组件是一个不同的点,通过该系统可以输入您的应用程序,并非所有组件都为用户和一些依赖于对方实际的切入 点,但每一个作为它的存在自己的实体,起着特定的作用,每一个都是一个独特的建筑块,帮助确定您的应用程序的整体行为。

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

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

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

一个活动是作为一个子Activity ,并可以学到更多关于它的活动的开发指南。

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

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

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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!