创建Android应用程序
本章节我们特别集中在创建Android应用程序。
Android应用程序剖析
对于一个Android应用程序有四种构成部分
?Activity
?IntentReceiver?Service
?ContentProvider
不是每一个的应用程序都需要所有这四个部分,但是你的应用程序将会用这些的组合来编写。
一旦你决定了你应用程序需要哪些组件,你应该在一个名叫AndroidManifest.xml文件中列出它们。这是一个XML文件,在里面声明你应用程序组件和它们的功能和需求是什么。我们将马上讨论,AndroidManifest.xml负责什么作用。
Activity
Activity是Android四个构建模块中最普通的一个。一个Acitivity通常在你应用程序中是一个单独的屏幕。每一个Activity是被实现作为一个继承于Activity基类的单独的类。你的Class将要显示一个由View和响应事件组成的用户界面。多数应用程序由多个屏幕组成。例如:一个文本消息发送程序可能有一个显示要发送信息的联系人列表的屏幕,有一个给选中的联系人编辑短信的屏幕,并且另外的屏幕显示以前信息或是更改设置。每一个这些屏幕应该作为一个
Activity被实现。移动到另外的屏幕上是通过启动一个新的Activity来完成。由于一些原因,一个Activity可能会向先前的Activity返回一个值——例如:一个让用户选择一个Photo的Activity将会返回选中的photo到caller应用程序上。
由anddev.org提供
16
Download at Pin5i.Com
andbook-Android编程
当一个新的屏幕开启,先前的屏幕被暂停并且压入历史堆栈。用户可以向后导航返回到在历史记录中先前打开的屏幕。当它们遗留不适当时,屏幕也可以选择从历史堆栈中删除。Andriod为每一个从Home屏幕上运行的每一个应用程序保留历史堆栈。
Intent和IntentFilter
Android使用一个名叫Intent的特殊类来让应用程序从一个屏幕移动到另一个屏幕。Intent描述了一个应用程序想要干什么。Intent数据结构的两个最重要的部分是:要响应的action和data。典型的action值是MAIN(应用程序的入口),VIEW、PICK、EDIT,等等。Data表示成一个统一资源定界符(URI).例如:要在浏览器中查看一个网站,你将创建一个带有VIEWaction的Intent和设置了网站URI的data。
有一个名叫IntentFilter的相关类。当一个Intent是一个有效地请求来做什么事,一个IntentFilter是:一个Activity(或Intentreceiver,参见下面)能够处理什么样的Intent的描述。一个为个人设计的有能力显示联系人信息的Activity应该发布一个当申请表示一个人的数据时,可以说是知道如何处理actionView的IntentFilter。Activity在AndroidManifest.xml文件中发布它们的IntentFilter。
从一个屏幕到另一个屏幕的导航通过解决Intent来完成。要向前导航,一个Activity调用startActivity(myInte)。系统接下来查找所有应用程序的IntentFilter并选取一个IntentFilter最适合myIntent的Activity。新的Activity被这个让它运行的Intent通知,解决Intent的过程发生在运行时候,即当startActivity()被调用时。startActivity()提供了两个关键益处:
??
Activity可以从其他组件上简单地通过以一个Intent格式做请求来重用功能Activity可以在任何时候被一个新的带有相等的IntentFilter的Activity替换
由anddev.org提供
17
IntentReceiver
当你想要在你的应用程序中编码来执行对外部事件的响应,你可以使用一个IntentReceiver。例如:当电话响铃,或当数据网络可用时,或当午夜时。虽然IntentReceiver不显示一个UI,但它们也许会显示一个通知来提醒用户是否有令人感兴趣的事件发生。IntentReceiver也是在AndroidManifest.xml中被注册,但你也可以在代码中使用\来注册它们。它的
IntentReceiver被调用时,你的程序不是非得运行的;假如必要时,当一个IntentReceiver被触发时,系统将会调用你的应用程序。通过使用
\,应用程序也能发送它们自己的\Broadcast\给别的应用程序。
Service
一个service是长期存活并且运行时不带UI的编码。这个Service的好例子是MediaPlayer从一个播放列表中播放歌曲。在一个MediaPlayer应用程序中,可能有一个或更多的Activity,这些Activity允许用户选择歌曲和开始播放歌曲。然而,音乐回放本身不应该被一个Activity处理,因为用户将期望在导航到一个新的屏幕后音乐保持播放。这种情况中,MediaPlayerActivity应该使用
\来启动一个服务在后台运行来保持音乐继续播放。接下来系统将保持音乐回放Service运行,直到这个Service被停止。(通过阅读Android应用程序生命周期,你可以学到更多关于先前给出的系统中的Service。的信息。)记住,你可以使用\方法来连接一个Service(如果还没有运行,并开启它)。当连接到一个Service,你可以通过一个Service显露出来的Interface来和它通信。对于音乐Service,这可能允许你暂停、倒回,等等。
ContentProvider
应用程序可以把他们的数据存储到文件中,一个SQLite数据库中,设置中,或是任何其他的有意义结构中。如果你想要你的应用程序的数据和其他应用程序共享,一个ContentProvider是有用的。一个ContentProvider是一个类,它实现了方法的一个标准设置来让其他应用程序存储和恢复被ContentProvider处理的数据类型。
由anddev.org提供
18
Download at Pin5i.Com
andbook-Android编程
Android用户界面(UI)
Android中的用户界面可以用两种方式来创建,通过定义XML-代码或通过编写Java-代码。在XML中定义GUI结构是非常好的,因为正如你从MVC(Model-Viewer-Control)原理中所知的,UI应该总是从项目逻辑中分离出来。另外,使一个项目从一个屏幕到另一个更加简单了。
在XML中定义一个UI是和创建一个普通的HTML文件非常相似,这个文件是你有的,换而言之,如此简单的文件:
和Android的XML-布局一样。每一样结构好并且能够通过树形结构来表达。
xmlns:android=\android:orientation=\android:layout_width=\android:layout_height=\> android:layout_width=\android:layout_height=\android:text=\World!\/>
由anddev.org提供
19
屏幕元素层次
Android应用程序基本功能单元是Activity——一个android.app.Activity类的物件(Object)。一个Activity能够做许多事情,但是通过它自己它不会出现在屏幕上。为了让你的Activity出现在屏幕上和设计它的UI,你使用View和ViewGroup(——表现在Android平台上的基本用户界面单元)来工作。
View
一个View是一个继承于android.view.View基类的物件。它是一种数据结构,它的属性为一个特殊的屏幕矩形域存储布局(layout)和Content。一个View物件处理它描绘的屏幕区域的尺寸、布局、绘制、焦点改变、翻屏和按键或手势。
View类作为一个基类为所有的widget——一系列完整实现的绘制交互屏幕元素的子类服务。Widget处理它们自己的尺寸和绘制,因此,你可以使用它们来更快速地构建你的UI。可获得的widget列表包括:(换言之)TextView、EditView、Button、RadioButton、Checkbox、ScrollView,……
Viewgroup
一个Viewgroup是一个android.view.Viewgroup类物件。顾名思义,一个viewgroup是一个特殊类型的view物件,它的功能是用来包含和管理一系列下属view和其他viewgroup,Viewgroup让你给你的UI添加结构和构建起复杂的可以称为一个单独的实体屏幕元素。
Viewgroup类作为一个基类为layout——一系列完整实现的提供普通类型屏幕元素的子类服务。Layout给你一种方式来为一系列view创建一个结构。
由anddev.org提供
20
Download at Pin5i.Com