属性的信息,比如动作、数据/数据类型、类别进行查找,最终找到一个与之匹配的目标组件。
附加信息:是其它所有附加信息的集合。使用附加信息可以为组件提供扩展信息,比如,如果要执行“发送电子邮件”这个动作,可以将电子邮件的标题、正文等保存在附加信息里,传给电子邮件发送组件。总之,动作、数据/数据类型、类别和附加信息一起形成了一种语言。这种语言使系统能够理解诸如“查看某联系人的详细信息”之类的短语。随着应用不断的加入到系统中,它们可以添加新的动作、数据/数据类型和类别来扩展这种语言。应用也可以提供自己的活动来处理已经存在的这样的“短语”,从而改变这些“短语”的行为。
3.3.2 Android如何解析Intent
在应用中,可以以两种形式来使用Intent:
(l)直接意图:指定了组件属性的意图。通过指定具体的组件类,通知应用启动对应的组件。
(2)间接意图:没有指定组件属性的意图。这些意图需要包含足够的信息,这样系统才能根据这些信息,在所有的可用组件中,确定满足此意图的组件。对于直接意图,Android不需要去做解析,因为目标组件已经很明确,Android需要解析的是那些间接意图,通过解析,将意图映射给可以处理此意图的活动、意图接收器或服务。
意图解析机制主要是通过查找己注册在AndroidManifest.xml中的所有意图过滤器及其中定义的意图,最终找到匹配的意图。在这个解析过程中,Android是通过意图的动作、数据类型、类别这三个属性来进行判断的,判断方法如下:
如果意图指明定了动作,则目标组件的意图过滤器的动作列表中就必须包含有这个动作,否则不能匹配。
如果意图没有提供数据类型,系统将从数据中得到数据类型。和动作一样,目标组件的数据类型列表中必须包含意图的数据类型,否则不能匹配。
如果意图中的数据不是content:类型的URI,而且意图也没有明确指定它的数据类型,将根据意图中数据的格式(比如http:或者mailto:)进行匹配。同上,意图的格式必须出现在目标组件的格式列表中。
如果意图指定了一个或多个类别,这些类别必须全部出现在组建的类别列表中。比如意图中包含了两个类别:
LAUNCHER_CATEGORY和ALTERNATIVEC_CATEGORY,解析得到的目标组件必须至少包含这两个类别。
3.4 Android活动的生命周期
Android平台是个手机作业系统。撇掉其他功能不谈,手机的特性,就是应该能随时在未完成目前动作的时候,暂停正在使用的功能,切换到接电话、接收短信模式,而且在接完电话回到应用程序时,还希望能看到一样的内容。现在用户使用智能手机,大多已习惯使用多工的作业系统(如windowsMobile),可以在用手机听音乐的同时,执行其他多个程序。同时执行多个程序有它的明显好处,但也有它的缺点。每多执行一个应用程序,就会多耗费一些系统内存,而手机里的内存是相当有限的。当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统运行时就会觉得越来越慢,甚至不稳定。为了解决这个问题,Android引入了一个新的机制—生命周期。
Android应用程序的生命周期是由Android框架进行管理,而不是由应用程序直接控制。通常,每一个应用程序(入口一般会是一个活动的onCreate方法),都会占据一个进程。当系统内存即将不足的时候,会依照优先级自动进行进程的回收。不管是使用者或开发者,都无法确定应用程序何时会被回收。关于进程的生命周期将在下一节中介绍,本节主要介绍活动的生命周期。
一个活动类别除了OnCreate方法之外,还预先定义了onPause(暂停)、OnResume(继续)等的基本方法,当从一个活动切换到另一个活动的时候,原来的活动将经过一连串的状态改变。开发者可以在程序中添加一些各状态相对应的流程,每次活动状态改变时,就会执行相对应的流程。要让用户有好的使用体验,活动需要在各个周期中负责保管状态、恢复状态、传送资料等工作。
3.4.1活动的生命状态
Android的虚拟机是使用堆栈管理。主要有四种状态: (l)活动状态
活动状态是指用户启动应用程序或活动后,活动运行中的状态。在Android平台上,同一个时刻只会有一个活动处于活动或运行状态。其他的活动都处于未启动、停止或是暂停的状态。
(2)暂停状态
暂停状态是指当活动暂时暗下来,退到背景画面的状态。当警告对话框或电话来了时,都会让原来运行的活动退到背景画面。新出现的警告对话框等界面元件盖住了原来的活动画面。活动处在暂停状态时,用户无法与原活动互动。
(3)停止状态
停止状态是指有其他活动正在执行,而这个活动己经离开屏幕,不再动作的状态。通过按返回键,可以调出所有处于停止状态的应用程序列表。处于停止状态的活动,还可以通过通知来唤醒。
(4)已回收或未启动状态
已回收或未启动状态是指活动尚未被启动、已经被手动终止或己经被系统回收的状态。要手动终止活动,可以在程序中调用finish方法。如果是被系统回收,可能是因为内存不足了,所以系统根据内存不足时的回收规则,将处于停止状态的活动所占用的内存回收。
图3-1 Android活动生命周期
图3-1所示的七个状态又可以归纳成三组: (l)资源分配(创建/销毁)
完整的活动生命周期由创建状态开始,由销毁状态结束。创建时分配资源,销毁时释放资源。
(2)可见与不可见(启动/重新启动/停止)
当活动运行到启动状态时,就可以在屏幕上看到这个活动。相反地,当活动运行到停止状态时,这个活动就会从屏幕上消失。当用户按下返回键回到上一个活动
时,会先到重新启动状态,再到一般的启动状态。
(3)用户取得屏幕的控制权(继续/暂停)
当有个警告对话框、短信、电话等信息进入时,原来的活动会进入暂停状态,暂时放弃屏幕的控制权,被中断到背景去,将前景交给优先级高的事件。当这些优先级高的事件处理完后,活动就改进入继续状态,此时又取得屏幕的控制权。
3.4.2 活动的运作流程
由实际运行来看,我们可以归纳出所有Android应用程序都遵循的运作流程: (l)一般启动
启动一个活动的基本流程为onCreate一>onstart一>onResume。该流程首先分配资源给这个活动(创建状态),然后将活动的内容显示到屏幕上(启动状态);在一切就绪后,取得屏幕的控制权(恢复状态),用户可以开始使用这个程序。
(2)调用另一个活动
调用另一个活动的基本流程为onpause(l)一>onCreate(2)一>onstart(2)一>0nResume(2)一>onStop(l)。该流程首先冻结原来的活动,再交出屏幕控制权;直到活动2完成一般启动流程后,活动1才会被停止。
(3)回到原来活动
回到原来活动的基本流程为onPause(2)一>onRestart(1)一>onstart(l)一>onResume(1)一>onstop(2)一>onDestroy(2)。另外按返回键也可以回到原来的活动。
(4)退出结束
退出结束的基本流程为onPause一>onStop一>onDestroy。如果程序中有直接调用finish方法来关闭活动的话,系统会跳过先冻结的阶段,直接暂停,停止,然后销毁。
(5)回收后再启动
回收后再启动的基本流程为oncreate一>onstart一>onresume。如果被回收掉的活动一旦又重新被调用时,会像一般启动一样再次调用活动的onCreate方法。
当在模拟器上已经执行过多个应用程序,只要按下返回键,就会开启最近一次开启过的活动。所以如果要让再次被创建的活动跟原来开启过的一样,那么在活动之间切换时,就要保存资料:即在每次活动运行到暂停或停止状态时先保存资料,然后在创建时将资料读出来。
4 Android校园通软件的设计与实现
4.1 研究目标
(1) 了解Android应用程序的设计和开发过程;
(2) 使用多种组件进行Android 平台校园资讯软件的开发。
本软件是基于Eclipse的开发环境,在Android平台上的手机校园资讯软件。 4.2 需求分析
本软件是Android平台的一个校园资讯程序,启动程序后查阅学校相关资讯包括在学校吃住娱乐风景等各方面的讯息。
从上面的描述中可以基本了解软件的功能需求: (1) 首先是学校电影院每周电影的更新; (2) 其次有学校的各种资料;
(3) 各种校园活动及周边娱乐设施的信息; (4) 校园校景美图查看; (5) 校园生活手册;
(6) 扩展内容“我的资料”,及“更多”两个Activity。
4.3 UI界面设计
根据需求分析可以知道,应用程序应包含五个主要的用户界面,这里需要进一步分析每个用户界面中应该包括哪些显示内容。
在首页中,需要对学校的大致情况做以介绍,并且有每周影讯的功能。在“分类”中,有各种学校的相关资料。包括娱乐,电影,纪录片,校景,公开课及生活。另外,还有扩展内容“我的资料”及“更多”两个选项卡如图4-1所示。