英语是大问题 只能google 但google也是大问题 代码都给翻译了
Android应用程序是用Java编程语言编写的。 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数据行事(除其他事项外,该组件被启动,可能需要知道)。 例如,意图传达的活动,来显示图像,或打开一个网页请求。 在某些情况下,你就可以开始活动,收到结果,在这种情况下,活动也返回结果在一个Intent
(例如,您可以发出意图让用户选择一个个人接触和它退还给您返回意图包括给选择的联系人的URI指向)。
对于广播接收器,其目的仅仅定义公布的广播(例如,指示的移动设备的电池电量低的广播只包括公知的行动,该值指示“电池电量低”的字符串)。
其他组件类型,内容提供商,没有被激活的意图。 相反,它被激活时,由一个请求从一个ContentResolver
对象。 内容解析与内容提供者处理所有直接交易的,这样的组件,执行与供应商的交易并不需要,而是ContentResolver
对象上调用方法。 这留下了内容提供商和组件请求信息(出于安全考虑)之间的抽象层。
激活每种类型的组件有不同的方法:
Intent
startActivity()
或startActivityForResult()
当你想要的活动,返回的结果)通过。Intent
startService()
或者,你可以绑定的服务, Intent
通过bindService()
Intent
sendBroadcast()
的方法,如通过,sendOrderedBroadcast()
或sendStickyBroadcast()
query()
ContentResolver
上query()
如需使用意图的更多信息,请参阅意图和意图过滤器文件。 关于激活特定组件的更多信息,也提供下列文件: 活动 , 服务 , BroadcastReceiver
内容提供商 。
Android系统可以启动一个应用程序组件之前,系统必须知道该组件存在阅读应用程序的AndroidManifest.xml
文件中(“清单”文件)。 在这个文件中,您的应用程序必须申报其所有组件,它必须是在应用程序项目目录的根目录下。
除了声明应用程序的组件,如清单做了一些事情:
清单的首要任务是通知系统应用程序的组件。 例如,一个manifest文件可以声明一个活动如下:
<?XML版本=“1.0”编码=“UTF-8”? <清单... > <应用程序的Android版本:图标=“@绘制/ app_icon.png”...... > <活动机器人:名称=“com.example.project.ExampleActivity” 机器人:标签=“@串/ example_label的”... > </活动> ... </> </清单>
在的<application>
元素android:icon
属性点资源标识的应用程序的图标。
<activity>
android:name
在Activity
android:label
<activity>
元素, android:name
属性指定Activity
子类,并在android:label
的完全限定类名称android:label
属性指定一个字符串使用用户可见的活动标签。
你必须申报所有应用程序组件是这样的:
<activity>
元素<service>
元素<receiver>
元素<provider>
元素 活动,服务和内容提供商,你包括你的源代码,但不申报清单中的系统是不可见的,因此,永远无法运行。 然而,广播接收器可以在清单中声明或在代码中动态创建(作为BroadcastReceiver
对象)通过调用registerReceiver()
并在系统中注册。
如需更多关于如何构建您的应用程序的清单文件,请参阅的AndroidManifest.xml文件文档。
如上所述, 激活组件 ,你可以使用Intent
开始活动,服务和广 播接收器。 你可以这样做明确命名目标组件(使用组件类名)的意图。 然而,真正的意图在于权力的意图行动的概念。 意图行动,你只需描述要执行的操作类型(以及可选的数据后,你想执行的动作),并允许系统在设备上可以执行的行动,并开始查找组件。 如果有多个组件可以执行所描述的意图的动作,然后,用户选择要使用哪一个。
系统识别组件,可以应对的意图的方式是通过比较接收到设备上的其他应用程序的清单文件中提供的意图过滤器的意图。
当你声明你的应用程序的清单中的一个组件,你可以选择包括意向申报功能的过滤器组件,因此它可以从其他应用程序的意图。 你可以声明一个意图过滤器为您的组件,通过添加组件的声明元素作为一个孩子一个<intent-filter>
元素。
例如与活动组成一个新的电子邮件,电子邮件应用程序可能宣布在其清单条目意图过滤器,以应对“送”的意图(以发送电子邮件)。 可以在你的应用程序中的活动,然后创建一个意图“发送”的动作( ACTION_SEND
),该系统相匹配的电子邮件应用程序的“送”活动,并启动它时,你startActivity()
调用的意图。
有关创建意图过滤器的更多信息,请参阅意图和意图过滤器文件。
搭载Android的设备有很多种,不是所有的人提供相同的功能和能力。 为了防止您的应用程序被安装在您的应用程序所需要的功能的设备缺乏,这一点很重要,你清楚地定义manifest文件中声明设备和软件要求您的应用程序支持的设备类型的配置文件。 这些声明的大多是信息系统不读,但外部服务,如谷歌播放不读他们,以便为用户提供过滤搜索时,他们从他们的设备的应用。
例如,如果你的应用程序需要一个摄像头,并使用在Android 2.1推出了( API 7 级 )的API ,你应该声明这些manifest文件中的要求。 这样一来, 没有一个摄像头和一个Android版 本低于 2.1的设备不能安装应用程序从谷歌播放。
但是,您也可以宣布你的应用程序使用相机,但并不需要它。 在这种情况下,您的应用程序在运行时必须进行检查,以确定设备是否有一个摄像头并禁用任何使用相机的功能,如果一个人不。
以下是为您设计和开发你的应用程序,你应该考虑的一些重要设备的特性:
屏幕大小:小,正常,大,特大型。
屏幕密度:低密度,中密度,高密度和超高密度。
默认情况下,你的应用程序是兼容所有的屏幕尺寸和密度,因为Android系统作出适当调整你的UI布局和图像资源。 然而,你应该建立专门的布局一定的屏幕尺寸,并提供专门的图像一定的密度,使用替代布局资源,并宣布在你的清单到底是哪屏幕尺寸你的应用程序支持与<supports-screens>
元素的。
欲了解更多信息,请参阅支持多种屏幕文件。
<uses-configuration>
元素。
然而,应用程序应该是罕见的,需要一定的输入配置。
<uses-feature>
元素应用程序使用的任何功能。
<uses-sdk>
元素,你应该申报的最低API级别。
重要的是,你声明你的应用程序的所有要求,因为,当你发布你的应用程序在Google播放,店里使用这些声明来过滤每个设备上可用的应用程序。 因此,您的应用程序应该是只提供给设备,以满足您的应用需求。
对于谷歌如何玩这些(和其他)的要求的基础上的过滤器应用的更多信息,请参阅谷歌播放文件的过滤器 。
Android应用程序是多人组成的代码,它需要从源代码是独立的资源,如图像,音频文件,以及任何有关应用程序的视觉呈现。 例如,你应该定义动画,菜单,样式,颜色和活动的用户界面的布局XML文件。 使用应用程序资源,可以很容易地更新您的应用程序,而无需修改代码,并通过提供一组替代资源的各种特性,使您能够优化你的应用程序,为各种设备配置(如不同的语言和画面尺寸)。
对于每一个资源,你在你的Android项目包括SDK生成工具定义一个唯一的整数ID,你可以用它来引用资源,从应用程序代码,或在XML中定义的其他资源。 例如,如果您的应用程序包含一个命名logo.png
(保存res/drawable/
目录)的图像文件,SDK工具生成资源ID名为R.drawable.logo
,您可以使用引用图像,然后将其插入在你的用户界面。
从源代码分开提供资源的最重要的方面之一是能够为您提供可替代资源,为不同的设备配置。 例如,在XML中定义UI字符串,您可以将字符串翻译成其他语言,并保存在单独的文件中的这些字符串。 然后,根据你追加到资源目录的名称(如res/values-fr/
法国字符串值)和用户的语言设置语言限定符 ,Android系统应用适当的语言字符串,以你的用户界面。
Android支持多种不同的预选赛替代资源。 为了定义设备配置应使用这些资源,包括资源目录的名称,限定符是一个简短的字符串。 再举一个例子,你应该经常创造不同的布局,为您的活动,这取决于设备的屏幕方向和大小。例如,当设备屏幕在纵向(高),你可能会想是垂直的按钮布局,但是当屏幕处于横向(宽),按钮应水平对齐。根据方向改变布局,你可以定义两种不同的布局,并应用适当的预选赛,每个布局的目录名。 然后,系统将自动根据当前设备的方向施加适当的布局。