资源描述
安卓手机软件制作(兴移工作室)
(郑重说明:以下资料切勿用于商业用途)
一,java编程MyEclipse介绍应用
1.1.1菜单
界面最上面的是菜单条,菜单条中包含菜单(如File)和菜单项(如File > New),菜单项下面则可能显示子菜单(如Window > Show View > Console)。如下图所示:
图3.1菜单条
菜单条包含了大部分的功能,然而和常见的Windows软件不同,MyEclipse的命令不能全部都通过菜单来完成。
1.1.2 工具栏
位于菜单条下面的是工具栏。如下图所示:
图3.2 工具栏
工具栏包含了最常用的功能。拖动工具栏上的虚线可以更改按钮显示的位置。下表列出了常见的MyEclipse工具栏按钮及其对应的功能:
新建文件或项目
保存
打印
新建UML模型文件
启动AJAX网络浏览器
新建Web Service
启动Web Service浏览器
发布Java EE项目到服务器
启动/停止/重启服务器
启动MyEclipse网络浏览器
打开项目或者文件所在目录
启动电子邮件软件发送文件
截屏
新建EJB 3 Bean
调试程序
运行程序
运行外部工具
新建Java项目
新建包
新建类
打开类型
搜索
打开Spring bean定义
切换单词匹配
下一标注
前一标注
最后一次修改的位置
文件的后一位置
文件的前一位置
1.1.3 透视图(Perspective)切换器
位于工具栏最右侧的是Eclipse特有的工具栏:透视图切换器。如下图所示:
图3.3透视图切换器
点击按钮可以显示多个透视图供切换。什么是透视图?当前的界面布局就是一个透视图,通过给不同的布局起名字,便于用户在多种常用的功能模块下工作,总体来说,一个透视图相当于一个自定义界面。一个透视图保存了当前的菜单栏,工具栏按钮以及视图的大小,位置,显示与否的所有状态,可以在下次切换回来时恢复原来的布局。
要关闭透视图,在按钮上点击右键,在弹出的菜单中选择Close即可。要再次显示,如上段所示点击对应的视图名称即可。如果发现在上面的列表中找不到,请点击图3.3透视图切换器中的Other…菜单项,在下面所示的打开透视图对话框(图3.4)中选中对应的透视图,然后点击OK即可。
另一种切换的办法是选择主菜单 Window > Open Perspective ,然后选中希望转向的透视图,如果没有,可以继续点击菜单项 Other来显示打开如图3.4所示的透视图对话框,选中列表中的透视图后,再点击对话框的OK按钮即可切换到对应的透视图。
在图3.4中有个复选框Show all,如果选中它可以在列表中看到和MyEclipse冲突的一些透视图,例如WTP Java EE,因此一般来说不要使用。MyEclipse的默认透视图是 MyEclipse Java Enterprise。本书中如没有特殊说明,都是用这个透视图来完成所有操作。如果你使用了Java透视图,那么有一些菜单项和工具栏按钮就会无法看到。
图3.4切换所有透视图
1.1.4 视图(View)
视图是显示在主界面中的一个小窗口,可以单独最大化,最小化显示,调整显示大小和位置,以及关闭。除了工具栏,菜单栏和状态栏之外,Eclipse的界面就是由这样的一个个的小窗口组合起来,像拼图一样构成了Eclipse界面的主要部分。下面的是大纲视图:
图3.5视图
每个视图包括关闭按钮,最大化和最小化按钮,视图工具栏以及视图主体和边框组成。视图最顶部显示的是标题栏,拖动这个标题栏可以在主界面中移动视图的位置,单击标题栏则会切换显示对应视图的内容;双击标题栏或者点击最大化按钮可以让当前视图占据整个窗口。点击将会关闭当前的视图。点击按钮最小化当前视图,这时候当前视图会缩小为一个图标并显示在界面的上侧栏,或者右侧栏和状态栏上,如下图所示:
图3.6最小化显示的视图
拖动工具栏上的虚线可以更改最小化视图显示的位置。点击按钮可以恢复最小化之前的视图位置和大小,点击最小化后的图标可以暂时显示(术语叫快速切换Fast View)视图的完整内容。鼠标放在边框上并拖动可以调节视图的显示大小。点击视图上的工具栏按钮可以执行对应的功能,而点击按钮则可以显示和当前视图相关联的功能菜单。
当视图不小心关闭后,可以通过下列菜单再次打开:Window > Show View,如下图所示,可以选择要显示的视图:
图3.7视图列表子菜单
如果在上面没有发现要显示的视图,可以点击Other…菜单,然后在所有的视图列表中选择所显示的视图,如下图所示:
图 3.8 显示视图对话框
可以在type filter text 这个框中输入视图的部分名字来模糊查找,这样能够快速定位到要显示的视图。
常见的视图及其功能:
Package Explorer
Java包结构
Hierarchy
类层次(继承关系)
Outline
大纲,显示成员等
Problems
错误,警告等信息
Tasks
任务如TODO标记
Web Browser
网络浏览器
Console
控制台,程序输出
Servers
服务器列表和管理
Properties
属性
Image Preview
图片预览
Snippets
代码片段
1.1.5 上下文菜单(Context Menu)
在界面的任何地方点击鼠标右键所弹出的菜单叫上下文菜单,它能方便的显示和鼠标所在位置的组件或者元素动态关联的功能。
1.1.6 状态栏(Status Bar)
在界面的最底部显示的是状态栏,相对来说,Eclipse的状态栏功能大大弱化,它的主要功能都集中在视图中。如下图所示:
图3.8 状态栏
1.1.7 编辑器(Editor)
在界面的最中央会显示代码或者其它文本或图形文件编辑器。这个编辑器和视图非常相似,也能最大化和最小化,所不同的是会显示多个标签页,也没有工具栏按钮,而且有一个很特殊的组件叫隔条,如图中的代码最左侧的蓝色竖条所示,隔条上会显示行号,警告,错误,断点等提示信息。编辑器里面的内容没有被修改时,会在标签页上显示 * 号。如下图所示:
图 3.9 编辑器
当同时打开多个文件时,会显示标签页下拉框例如>>4,数字表示了有多少个已打开的文件未在编辑器区域中显示。单击>>可以显示文件列表选择框,可以在输入框中输入部分字母来模糊匹配已打开的文件。如下图所示:
图3.10 文件列表选择框
1.2 常见概念和操作
1.2.1 项目(Project)
Eclipse中所有的可以编译运行的资源必须放在项目中,单独打开文件很多功能不可用。项目表示了一系列相关的文件和设置(例如类路径,编译器级别,发布路径等等的设置)。一般来说目录下的.project和.classpath这两个文件描述了当前项目的信息。打开项目可以先选中单个或者多个项目,然后选择菜单Project > Open Project,或者点右键选择菜单Open Project。关闭项目可以先选中要关闭的单个或者多个项目,然后选择菜单Project > Close Project,或者点右键选择菜单Close Project。
1.2.2工作区(Workspace)
一个Eclipse可以有多个工作区,每个工作区包含了多个项目,以及所有其余的设置信息例如界面布局,文字大小,服务器定义等等。但是一个工作区只能被单个Eclipse进程使用。另外同一个项目也会加入到不同的工作区中。
注意:删除工作区目录的时候很可能误删位于工作区中的项目文件。工作区目录会有一个名为.metadata的目录来保存所有设置信息。在Eclipse启动的时候会让你选择要使用的工作区。如果输入的工作区目录不存在,Eclipse会自动创建它。
1.2.3 导入、导出Java项目
1.2.3.1 导入项目
当下载了包含Eclipse项目的源代码文件后,我们可以把它导入到当前的Eclipse工作区然后编辑和查看。点击菜单File > Import,然后在弹出的Import对话框中展开General目录,选择Existing Projects into Workspace,接着点击Next按钮。当选中单选钮Select root directory:时可以点击Browse…按钮选中包含项目的文件夹,如果包含项目的话就可以在中间的Projects列表框中显示;而当选中单选钮Select archive file:时可以点击Browse…按钮选中包含项目的ZIP压缩包,如果包含项目的话就可以在中间的Projects列表框中显示。最后点击Finish按钮就可以导入项目并打开了。如下图所示:
图3.11 导入项目
1.2.3.2 导出项目
点击菜单File > Export,然后在弹出的Export对话框中展开General目录,选择Archive File,接着点击Next按钮。然后在To archive file:输出框中选中要保存的文件名,一般写成项目名.zip,然后点击Finish按钮即可导出当前项目。还有一种方式是手工打包,用WinRAR或者WinZIP等工具都可以,先点击工具栏上的打开项目所在目录,接着就可以用你喜欢的工具来打包代码目录了。
1.2.4快速修正代码错误
在Eclipse的编辑器中编写代码以及编译后会显示检查出来的错误或者警告并在出问题的代码行首的隔条上显示红叉以及点亮的灯泡。左键点击灯泡或者按下快捷键Ctrl+1 (或者菜单Edit > Quick Fix)可以显示修正意见,并在修正前显示预览。如下图所示:
图 3.12 快速修正代码错误
1.2.5优化导入列表
代码中经常会导入无用的包和类,通过菜单Source > Organize Imports或者在编辑器的上下文菜单中选择菜单项Source > Organize Imports,或者按下快捷键Ctrl+Shift+O也可以来重新组织并去掉无用的类和包。
1.2.6添加,修改,删除JRE
通过菜单Window > Preferences,然后选择Java > Installed JREs,可以打开供在Eclipse编写程序所使用的JRE列表。复选框选中的JRE是默认的JRE,它被项目里面所有的项目来作为编译和启动的JRE(除非在项目的Build Path中指定了其它的JRE)。可以通过Add…按钮来添加新的JRE定义(在弹出的对话框中选择Browse…按钮然后选中JDK的安装目录,之后点击OK即可),Edit…按钮可以修改JRE定义,Remove按钮可以删除JRE定义,选中不同的JRE前面的复选框来把它作为默认JRE。虽然MyEclipse能够自动找到并显示一个JRE,但是强烈建议大家添加一个JDK来进行开发,便于查看JDK类源码和编码时能够显示提示信息。如下图所示:
图 3.13 配置安装的JRE
1.2.7查看类定义,层次和源码
查看类定义或者其源码,可以在编辑器的上下文菜单中选择Open Declaration,或者选择菜单Navigate > Open Declaration,或者按下F3键。如果这个类关联了源码(例如JDK里面的类),就可以看到源代码,否则只能看到类的方法和成员信息。
查看类的继承层次,可以在编辑器的上下文菜单中选择Open Type Hierarchy,或者选择菜单Navigate > Open Type Hierarchy,或者按下F4键,或者将类或者包拖放到Hierarchy视图,就可以在Hierarchy视图看到类的继承层次,之后就可以点击对应的类看到定义了。
1.2.8查找类文件(Open Type)
要快速找到某个类型的定义,选择菜单Navigate > Open Type,或者按下Ctrl+Shift+T键,或者按下工具栏按钮。这时候可以出现Open Type对话框,在Enter type name prefix or pattern输入框中键入类的头几个字母,或者也可以使用?和*这样的通配符来模糊查找,对话框下面的列表中将会显示匹配的类文件,选中列表中显示的单个或者多个类定义来打开它。如果这个类关联了源码(例如JDK里面的类),就可以看到源代码,否则只能看到类的方法和成员信息。如下图所示:
图 3.14 Open Type对话框
1.2.9源码目录,输出路径,Library和编译器版本设置
点击菜单 Project > Properties 或者在Package Explorer项目节点上右键点击选择上下文菜单中的Properties,或者用快捷键Alt+Enter,可以打开项目属性对话框。选择左侧的Java Build Path,可以在右侧显示项目的类路径有关的设置标签页。Source页显示了源代码目录(可以使用一个或者多个,里面的源文件将会被编译)以及Java源代码编译后产生的类文件所存放的目录。这些参数都可以修改,源代码目录可以添加或者删除。Package Explorer 视图默认是不显示类文件的输出目录的。如下图所示:
图 3.15 源码目录和输出路径
点击 Libraries页面则可以设置当前项目的类路径,这些类库在编译源文件时使用。如下图所示:
图 3.16 类库
Add JARs按钮可以将当前项目中的jar文件加入到类路径,Add External JARs则将添加项目外的jar文件到类路径,Add Variable添加变量,Add Library可以添加类库(一个或者多个jar文件的集合,由开发工具定义和管理),Add Class Folder则添加目录中的类文件,Edit可以修改所选类库的设置,Remove则从类路径中删除选中的类库。
在开发中不可避免的需要设置源代码的编译级别,例如使用JDK1.6来开发将来运行于JDK1.4上的项目,那么这时候需要设置编译器的等级,否则将来的类文件会因为版本过高而不能被目标JDK识别。点击项目属性对话框中的Java Compiler可以设置代码的编译器级别。如下图所示:
图3.17 编译器级别
如果只是修改当前项目的编译器级别,可以选中复选框Enable project specific settings,然后在Compiler compliance level右侧的下拉框中选择目标的编译级别,例如5.0,1.4等等。还可以去掉Use default compliance settings复选框的选中状态,来进一步设置。这些设置将会影响到源代码中的语法错误检查,例如要在1.4级别的项目中用5.0的语法写代码,肯定是会报错的。
如果要修改所有项目的默认编译级别,点击Configure Workspace Settings…来打开全局设置对话框,这两处的设置几乎是一样的,就不再赘述了。
1.2.10生成getter和setter 方法
在写JavaBean的时候常常要写一些模版化的getXXX()和setXXX()这样的方法,我们可以用Eclipse来自动生成这些模版化的方法。先写好 private String name; 这样的变量定义,然后选择菜单Source > Generate Getters and Setters… 或者在编辑器中点击右键选择菜单Source > Generate Getters and Setters…就可以打开Generate Getters and Setters对话框,在对话框中选择要生成的方法,然后点击OK按钮即可。
1.2.11格式化源代码
有时候代码手写的很乱,这时候可以先选中要格式化的代码(不选择是格式化当前文件的所有代码),通过选择菜单Source > Format 或者在编辑器中点击右键选择菜单Source > Format 或者通过快捷键Ctrl+Shift+F来快速的将代码格式化成便于阅读的格式。这个操作在MyEclipse中也可以格式化XML,JSP,HTML等源文件。
1.2.12注释和取消注释
使用快捷键 Ctrl + / 可以将选中的代码快速的添加或者去掉两个斜线(//)风格的注释。
1.2.13手工和自动编译
如果是特别大的项目,例如几千个源代码,使用Eclipse来自动编译将会是一场噩梦。每键入一行代码都会自动启动编译器检查进程,严重时候屏幕甚至会卡着不动(这也是Eclipse的一个优点之中的缺点)。这时候可以切换Eclipse的自动编译为手工编译。去掉菜单Project > Build Automatically 的选中状态后,项目就变成了手工编译状态;再次点击菜单可以重新切换会自动编译状态。这时候再键入代码就不会自动检查编译错误了,也不会生成编译后的类文件,这样有助于快速的写代码。此时要进行编译可以选择菜单 Project > Build Project 来编译当前项目或者 Project > Build All 来编译所有项目。
1.2.14直接粘贴Java源码为类文件
Eclipse 3.3 支持一个功能就是如果剪贴板上放的是Java源程序,例如如下所示的代码复制到剪贴板上:
public class YetAnother {
}
那么点击菜单 Edit > Paste 或者在Package Explorer视图的项目节点的上下文菜单中选择 Paste,或者按下快捷键 Ctrl + V,那么Eclipse会根据这段代码自动生成一个新的.java 文件并把它加入到当前项目的源代码目录中。
1.2.15复制项目中的文件
首先选中Package Explorer视图的文件节点(Java类或者普通文件都可以),那么点击菜单 Edit > Copy 或者在Package Explorer视图的项目节点的上下文菜单中选择 Copy,或者按下快捷键 Ctrl + C,之后再选择粘贴的话,会在要粘贴的位置创建原始文件的副本,如果是类的话会自动修改其包定义或者提示你输入类的新名称。如果你在Windows的文件浏览器中选中一个文件或者文件夹复制,之后再在Eclipse中粘贴,那么这个文件或者文件夹会立即复制并加入到当前项目中,这样可以快速的导入一些单独的源代码。
1.2.16断点和调试器
在源代码的隔条上双击鼠标可以切换是否在当前行设置断点(break point),断点以的形式显示,如下图所示:
图 3.18 断点
之后我们可以通过菜单Run>Debug,或者Run > Debug As > 1 Java Application,或者通过工具栏按钮,或者快捷键F11,或者在编辑器的上下文菜单中选择 Debug As > 1 Java Application 来启动调试器。当调试器遇到断点时就会挂起当前线程并切换到调试透视图。调试透视图将会显示Debug视图,Variables视图,Breakpoints视图和Expressions视图。例如我们的程序调试时如下所示:
图 3.19 Debug 视图
Debug 视图中显示了当前所有运行中的线程以及所执行的代码所在的位置。
这时候编辑器中将会以绿色高亮行背景指示执行代码的位置,如下图所示:
图 3.20 调试时候的代码指示器
而Variables视图则显示当前线程所执行到的方法或者类中的局部,全局等变量的值。
图 3.21 Variables视图
这时候线程已经挂起,点击Debug视图的 Resume按钮来继续往下执行,要重新挂起可以选择某个线程,然后点击 Suspend按钮。要一行行的调试代码,可以点击 Step Over按钮来往下执行,或者按下F6键。要终止调试,可以点击按钮。
注意:Eclipse中的调试器功能很完善,但是使用也非常复杂,更详细的资料可以参考IBM的开发人员站点或者Eclipse的帮助文档。限于篇幅这里就不再多介绍了。
1.2.17快速加入、删除jar包到Build Path
首先将jar文件复制到项目中(参考复制项目中的文件一节),然后在Package Explorer视图的jar文件上单击右键,选择菜单Build Path > Add to Build Path 就可以将这个jar文件加入Build Path;要从项目的Build Path中去掉这个jar文件,可以选择上下文菜单中的Build Path > Remove from Build Path。
如果是MyEclipse的Web项目的话,当你将jar文件添加到WebRoot/WEB-INF/lib 下后,MyEclipse会自动把它加入到当前项目。如果发现新加入的文件没有显示在Eclipse中,可以在Package Explorer视图中选择上下文菜单中的Refresh或者按下快捷键F5就可以看到了。
1.2.18查看当前类被哪些类引用
在项目中如果能看到类或者变量,方法被哪些其它的类所引用,将会大大的加快调试或者理解程序结构的进度。可以在编辑器的上下文菜单中选择References > Project来显示当前项目哪些类引用到了它,或者References > Workspace来看整个工作区里面哪些类引用到了它。查找结果显示在Search视图中。
1.2.19设置编辑器字体,颜色和显示行号
默认情况下Eclipse的代码编辑器是不显示行号的,要显示它可以通过菜单Window > Preferences… 来打开Preferences设置对话框,几乎所有Eclipse的设置选项都可以在这里找到。要显示行号,可以展开节点General > Editors > Text Editors,在右侧的设置中选中复选框 Show line numbers即可。如图所示:
图 3.22a 显示行号
然而最快的方式还是在编辑器隔条(最左侧栏)上点击右键,在弹出的快捷菜单上选择复选菜单Show Line Numbers即可,之后就可以看到行号了。此过程如下图3.22b所示。显示了行号的编辑器如图3.23所示。
图 3.22b 通过编辑器隔条右键点击显示行号
图 3.23 显示了行号的编辑器
要修改编辑器的字体,可以选择Preferences对话框的General > Appearance > Colors and Fonts,之后就可以在右侧修改字体了。
注意:编辑器的字体是设置Basic>Text Font,之后点击Change…按钮即可。如下图所示:
图 3.24 修改编辑器字体
1.2.20 Link文件
Eclipse支持一种特殊的概念叫Link文件,其实和Windows的快捷方式这个概念是非常像的。选择菜单File > New > File 或者 File > New > Folder,可以打开新建文件或者目录的对话框,如下图所示:
图 3.25 Link 方式创建文件
这时候如果点击Advanced按钮,然后选中复选框Link to file in the file system,之后就可以点击Browse…按钮来选中项目之外的其它文件。此时创建的文件就叫一个Link文件,相当于快捷方式,真正的内容是存储在c:\HelloWorld.java中,但是对项目中的这个文件的修改会自动的同步到c:\HelloWorld.java中去,就好像这个文件是在当前项目中一样。创建完毕的文件图标上会显示一个箭头来说明这个文件是个Link文件,看起来像这样;目录的图标显示起来像这样:。Link目录中的Java源代码也可以加入到源代码目录中去进行编译。
注意:因为 Link 方式的文件依赖于文件系统的绝对路径,因此不建议使用这种方式来把你的项目打包发给别人来使用。
1.2.21安装插件
我们假定的是C:\Java\MyEclipse6.0为你的MyEclipse的安装目录,一般的Eclipse插件只需要复制到C:\Java\MyEclipse6.0\eclipse\plugins 下面就可以安装完毕,这样的插件一般是单独的jar文件。如果发现下载的插件是个ZIP格式而且发现解压缩后带有eclipse子目录,那需要把它直接复制到C:\Java\MyEclipse6.0覆盖eclipse目录即可完成安装(注意:不要删除老的eclipse目录)。
1.2.22获取帮助和阅读帮助文档
在任何位置按下F1键,Eclipse会显示相关的帮助文档;完整的帮助文档可以通过菜单Help > Help Contents 来阅读。绝大多数的MyEclipse和Eclipse的操作说明,相关的一些教程,都可以在帮助文档中找到,虽然内容是英文的,但是内容是非常全面,图文并茂的。MyEclipse Learning Center 里的内容是所有MyEclipse自带的操作和教程文档。
1.2.23 CVS团队源代码管理(在线阅读)
请参考IBM开发人员社区的一篇文章来学习:
使用 Eclipse 平台共享代码――Eclipse 如何使用源代码版本控制
1.2.24 修改文件的字符编码
Eclipse中不同的文件会采取不同的默认编码,还有的项目会用UTF-8等编码。例如 .properties 文件默认只能保存 ISO8859-1 的编码,要想在这样的文件中写汉字,只需要更改字符集为对应的编码即可。修改方法: 右键点击文件选择菜单 Properties,然后在 Text file encoding 下面选择单选钮 Other,接着点击右侧的编码列表,一般来说中文选择 GBK 就好了。 如果你发现 .java 文件(Linux平台下)是 UTF-8 编码的,你也可以修改成 .GBK 的,否则拿到 Windows 下可能就出现乱码问题了。
二,安卓程序开发指南
应用程序基础Application Fundamentals
关键类
1. Activity
2. Service
3. BroadcastReceiver
4. ContentProvider
5. Intent
Android应用程序使用Java做为开发语言。aapt工具把编译后的Java代码连同其它应用程序需要的数据和资源文件一起打包到一个Android包文件中,这个文件使用.apk做为扩展名,它是分发应用程序并安装到移动设备的媒介,用户只需下载并安装此文件到他们的设备。单一.apk文件中的所有代码被认为是一个应用程序。
从很多方面来看,每个Android应用程序都存在于它自己的世界之中:
· 默认情况下,每个应用程序均运行于它自己的Linux进程中。当应用程序中的任意代码开始执行时,Android启动一个进程,而当不再需要此进程而其它应用程序又需要系统资源时,则关闭这个进程。
· 每个进程都运行于自己的Java虚拟机(VM)中。所以应用程序代码实际上与其它应用程序的代码是隔绝的。
· 默认情况下,每个应用程序均被赋予一个唯一的Linux用户ID,并加以权限设置,使得应用程序的文件仅对这个用户、这个应用程序可见。当然,也有其它的方法使得这些文件同样能为别的应用程序所访问。
使两个应用程序共有同一个用户ID是可行的,这种情况下他们可以看到彼此的文件。从系统资源维护的角度来看,拥有同一个ID的应用程序也将在运行时使用同一个Linux进程,以及同一个虚拟机。
应用程序组件
Android的核心功能之一就是一个应用程序可以使用其它应用程序的元素(如果那个应用程序允许的话)。比如说,如果你的应用程序需要一个图片卷动列表,而另一个应用程序已经开发了一个合用的而又允许别人使用的话,你可以直接调用那个卷动列表来完成工作,而不用自己再开发一个。你的应用程序并没有吸纳或链接其它应用程序的代码,它只是在有需求的时候启动了其它应用程序的那个功能部分。
为达到这个目的,系统必须在一个应用程序的一部分被需要时启动这个应用程序,并将那个部分的Java对象实例化。与在其它系统上的应用程序不同,Android应用程序没有为应用准备一个单独的程序入口(比如说,没有main()方法), 而是为系统依照需求实例化提供了基本的组件。共有四种组件类型:
Activity
Activity是为用户操作而展示的可视化用户界面。比如说,一个activity可以展示一个菜单项列表供用户选择,或者显示一些包含说明的照片。一个短消息应用程序可以包括一个用于显示做为发送对象的联系人的列表的activity,一个给选定的联系人写短信的activity以及翻阅以前的短信和改变设置的activity。尽管它们一起组成了一个内聚的用户界面,但其中每个activity都与其它的保持独立。每个都是以Activity类为基类的子类实现。
一个应用程序可以只有一个activity,或者,如刚才提到的短信应用程序那样,包含很多个。每个activity的作用,以及其数目,自然取决于应用程序及其设计。一般情况下,总有一个应用程序被标记为用户在应用程序启动的时候第一个看到的。从一个activity转向另一个的方式是靠当前的activity启动下一个。
每个activity都被给予一个默认的窗口以进行绘制。一般情况下,这个窗口是满屏的,但它也可以是一个小的位于其它窗口之上的浮动窗口。一个activity也可以使用超过一个的窗口──比如,在activity运行过程中弹出的一个供用户反应的小对话框,或是当用户选择了屏幕上特定项目后显示的必要信息。
窗口显示的可视内容是由一系列视图构成的,这些视图均继承自 View 基类。每个视图均控制着窗口中一块特定的矩形空间。父级视图包含并组织它子视图的布局。叶节点视图(位于视图层次最底端)在它们控制的矩形中进行绘制,并对用户对其直接操作做出响应。所以,视图是activity与用户进行交互的界面。比如说,视图可以显示一个小图片,并在用户指点它的时候产生动作。Android有很多既定的视图供用户直接使用,包括按钮、文本域、卷轴、菜单项、复选框等等。
视图层次是由Activity.setContentView() 方法放入activity的窗口之中的。上下文视图是位于视图层次根位置的视图对象。(参见用户界面章节获取关于视图及层次的更多信息。)
服务
服务没有可视化的用户界面,而是在一段时间内在后台运行。比如说,一个服务可以在用户做其它事情的时候在后台播放背景音乐、从网络上获取一些数据或者计算一些东西并提供给需要这个运算结果的activity使用。每个服务都继承自Service基类。
一个媒体播放器播放播放列表中的曲目是一个不错的例子。播放器应用程序可能有一个或多个activity来给用户选择歌曲并进行播放。然而,音乐播放这个任务本身不应该为任何activity所处理,因为用户期望在他们离开播放器应用程序而开始做别的事情时,音乐仍在继续播放。为达到这个目的,媒体播放器activity应该启用一个运行于后台的服务。而系统将在这个activity不再显示于屏幕之后,仍维持音乐播放服务的运行。
你可以连接至(绑定)一个正在运行的服务(如果服务没有运行,则启动之)。连接之后,你可以通过那个服务暴露出来的接口与服务进行通讯。对于音乐服务来说,这个接口可以允许用户暂停、回退、停止以及重新开始播放。
如同activity和其它组件一样,服务运行于应用程序进程的主线程内。所以它不会对其它组件或用户界面有任何干扰,它们一般会派生一个新线程来进行一些耗时任务(比如音乐回放)。参见下述 进程和线程 。
广播接收器
广播接收器是一个专注于接收广播通知信息,并做出对应处理的组件。很多广播是源自于系统代码的──比如,通知时区改变、电池电量低、拍摄了一张照片或者用户改变了语言选项。应用程序也可以进行广播──比如说,通知其它应用程序一些数据下载完成并处于可用状态。
应用程序可以拥有任意数量的广播接收器以对所有它感兴趣的通知信息予以响应。所有的接收器均继承自BroadcastReceiver基类。
广播接收器没有用户界面。然而,它们可以启动一个activity来响应它们收到的信息,或者用NotificationManager来通知用户。通知可以用很多种方式来吸引用户的注意力──闪动背灯、震动、播放声音等等。一般来说是在状态栏上放一个持久的图标,用户可以打开它并获取消息。
内容提供者
内容提供者将一些特定的应用程序数据供给其它应用程序使用。数据可以存储于文件系统、SQLite数据库或其它方式。内容提供者继承于ContentProvider 基类,为其它应用程序取用和存储它管理的数据实现了一套标准方法。然而,应用程序并不直接调用这些方法,而是使用一个 ContentResolver 对象,调用它的方法作为替代。ContentResolver可以与任意内容提供者进行会话,与其合作来对所有相关交互通讯进行管理。
参阅独立的内容提供者章节获得更多关于使用内容提供者的内容。
每当出现一个需要被特定组件处理的请求时,Android会确保那个组件的应用程序进程处于运行状态,或在必要的时候启动它。并确保那个相应组件的实例的存在,必要时会创建那个实例。
激活组件:intent
当接收到ContentResolver发出的请求后,内容提供者被激活。而其它三种组件──activity、服务和广播接收器被一种叫做intent的异步消息所激活。intent是一个保存着消息内容的Intent对象。对于activity和服务来说,它指明了请求的操作名称以及作为操作对象的数据的URI和其它一些信息。比如说,它可以承载对一个activity的请求,让它为用户显示一张图片,或者让用户编辑一些文本。而对于广播接收器而言,Intent对象指明了声明的行为。比如,它可以对所有感兴趣的对象声明照相按钮被按下。
对于每种组件来说,激活的方法是不同的:
· 通过传递一个Intent对象至 Context.startActivity()或Activity.startActivityForResult()以载入(或指定新工作给)一个activity。相应的activity可以通过调用 getIntent() 方法来查看激活它的intent。Android通过调用activity的onNewIntent()方法来传递给它继发的intent。
一个activity经常启动了下一个。如果它期望它所启动的那个activity返回一个结果,它会以调用startActivityForResult()来取代startActivity()。比如说,如果它启动了另外一个activity以使用户挑选一张照片,它也许想知道哪张照片被
展开阅读全文