APP下载

深入剖析Android Activity

2011-11-09段琳

中国新技术新产品 2011年16期
关键词:用户界面接收器开发者

段琳

(安徽理工大学计算机科学与工程学院,安徽 淮南 232001)

引言

活动是最基本的android应用程序组件,应用程序中,一个活动通常是一个单独的屏幕,Activity代表一个用户所能看到的屏幕,Activity主要处理一个应用的整体性工作,对其概念及生命周期进行剖析可加深对其了解,加强对其灵活应用。

1 Android应用程序的组成

Android系统是Google公司开发的基于Linux平台的开源手机操作系统,该平台由操作系统、中间件、用户界面和应用软件组成,是首个为移动终端打造的开放和完整的移动软件。一个通过Android框架所创建的Android应用程序,有四种基本类型。

(1)Activities。Activities类似于桌面系统下的独立应用程序,例如:office办公软件。Activities是由许多需要及时运行的可执行代码组成,用户或者操作系统都可以通过实例化,运行Activities。Activities可以与用户机型交互,并且可以通过使用query或Intent对象向其他的Activities或服务请求数据或服务。

许多Android可执行代码将在Activity的环境下执行。Activities通常相当于一个显示器:每个Activity都有一个界面提供给用户。当一个Activity当前不再运行时,操作系统将其杀死以保护内存。

(2)Services。Services类似于桌面操作系统和服务器操作系统的服务或守护程序。Services是由一些可执行代码组成,通过实例化运行在后台,并且直到手持设备关闭后才结束。Services一般没有用户界面。

(3)Broadcast and Intent Receivers。这些接收器是对其他应用程序的服务请求作出响应。一个广播信息接收器是在系统做大规模广播事件时作出响应。这个广播信息可以来自Android系统自身或者来自运行在该系统上的一些程序。一个Activity或者Service给其他应用提供了执行一个Intent接收器来访问自己功能的途径,该Intent接收器是由一段可以向其他Activities请求数据或服务的可执行代码组成。请求Activity创建一个Intent,并由Android框架通过分析作出决定是哪个应用程序接收并应用它。Intents在Android中是一个关键结构元素,可以使从已存在的应用中创建新的应用,在你的应用程序中,你可以通过使用Intent对象与那些可以提供你所需要的信息的其他应用程序和服务相互配合。

(4)Content providers。Content提供器是用来创建与其他Activity和Service共享数据的对象。一个Content Provider使用一个用URI组成的标准接口来实现向其他应用程序请求数据,即使那些应用程序可能不知道使用的是哪个Content Provider。例如:当一个应用程序执行一个Query对象来查找数据,它所执行的URI结构如下:

content://contacts/people

操作系统依靠观察哪个应用程序将自己作为一个Content Provider来提供URI,并且发送请求给对应的应用程序。如果不止一个Content Provider注册提供URI,操作系统将询问用户将使用哪个。一个应用程序没有要求必须使用所有的Android组件,但是一个优秀的应用程序将使用其提供的构建机制,这样就不会出现代码重复或者引用其他应用程序很困难的情况。URI和Intent一起为用户提供了灵活的Android环境。你可以很简单的添加、删除和取代一个应用程序,并且在Intent和URI的松耦合配合下,可以保证所有的事情一起进行。

2.Activity相关概念

一个Activity相当于手机的一屏,它能够获得焦点,用户一般都在它上面操作。几乎所有的activity都跟用户打交道,所以Activity类主要负责创建一个窗口,可以通过调用setContentView(View)方法在Activity上放置UI组件。Activity除了通常作为一个全屏的窗口呈现给用户之外,它们还有其他的使用方法:

(1)作为一个浮动窗口,这可以通过设置theme属性windowIsFloatting来实现;

(2)嵌入其他的Activity,这使用Activity-Group来实现。

Activity的子类通常要实现如下两个方法,也就是说,当你要自己创建一个activity的时候,一般需要实现的:

(1)onCreate(Bundle)。我们可以在该方法里初始化Activity。通常,我们在这个方法里调用setContentView(int)来设置Activity的内容,这个方法的int类型的形参是一个布局资源的ID,我们在这个布局中就设计好了Activity的内容了。此外,使用findViewById(int)方法检索到我们要进行交互的widgets组件。

(2)onPause()。当用户离开当前activity的时候,我们就在这个方法里面处理,一般来说,就是处理用户所作的改变,譬如用户填写了一些数据,我们就在这个方法里提交这些数据进行保存,通常是保存到Content Providers。

3.Android活动Activity的生命周期

Android是围绕移动应用的唯一需求进行设计的。在特定情况下,Android可以识别移动设备上受限制的资源(如内存和电量),以及提供相应的机制保护这些资源。这些机制在Android的Activity生命周期体现得很明显,定义了Activity从创建到销毁的过程状态和事件。

Android活动Activity是一个非常著名的生命周期,每个Android应用程序的活动都有几个状态,如图1所示,但开发者是不需要关心应用程序是什么状态,这全部由Android操作系统负责管理。开发者可以通过调用相关的方法获知到应用程序活动状态即将改变。

图1 Activity生命周期

开发者只需要在Activity类中重载图1中的相应方法,以便在状态发生变化时做一些需要的控制:

onCreate(Bundle):活动activity在第一次被创建时调用该方法,开发者可以在该方法中做一些初始化工作,比如创建用户界面,创建你的视图和打开Activity需要用到的所有数据文件。onCreate允许一个null参数,或者是一个由on-SaveInstanceState()方法保存下的状态作为参数。onStart():表示该活动将要显示给用户。

onResume():当活动可以与用户交互时调用该方法。在此开发播放动画和音乐是一个很不错的时机。

onPause():当活动将要被放置到后台(background)运行时调用该方法,通常另一个活动被激活或启动到前段(foreground)时,在此时可以保存应用程序的状态。

onStop():当活动Activity在一段时间里用户不可见和需要时,将调用该方法。如果设备内存紧张时,可能不会调用这个方法,此时操作系统只简单的终端进行。

onRestart():当该方法调用时,标志该活动将重新从停止状态显示到前端。

onDestroy():当活动被销毁时调用该方法。当内存紧张时,系统不一定会调用onDestroy()这个方法。

onSaveInstanceState(Bundle):Android 调用这个方法保存活动的先前状态,比如光标在文本编辑框中的位置,一般来说,我们是不需要重载这个方法的,因为系统缺省是自动保存用户界面所有的状态的。

那些没有运行在前端的活动可能会被停止,或者被Linux进程管理杀死进行,以为新的活动腾出更多的资源,这个经常发生的情况,因此开发者在设计程序之初就要重新考虑这个问题。在大多数情况下,onPause()是活动中最后调用的方法,因此可以在这个方法里保存数据。

4.结束语

本文重点描述了Android中的Activity生命周期,在Activity的生命周期中,只要离开了可见状态,或者说失去了焦点,activity就很可能被进行终止。随着Google公司大力推广Android平台和Android智能手机,相信人们会越来越重视Android的相关知识,针对Activity生命周期的研究也会越来越深入。

[1]Mark L.Murphy.Beginning Android 2[M].A-press,2010.

[2]盖索林.Google Android 开发入门指南[M].北京:人民邮电出版社,2009.

[3]郭宏志.Android 应用开发详解[M].北京:电子工业出版社,2010.

[4]韩超.Android 系统原理及开发要点详解[M].北京:电子工业出版社,2010.

[5][美]Sayed Y.Hashimi,[印]Satyo Komatineni,[美]Dave MacLean.精通 Android 2[M].杨越,译.北京:人民邮电出版社,2010.

猜你喜欢

用户界面接收器开发者
自然用户界面在智能家居系统中的应用路径创新研究:生成式人工智能技术的调节作用
基于CiteSpace的国外用户界面体验图谱量化分析
JXG-50S型相敏轨道电路接收器自动测试台
埃及
iOS开发者调查
iOS开发者调查
ZPW-2000A轨道电路接收器冗余电路存在问题分析及对策
栝楼产业开发者谢献忠
基于B/S的跨平台用户界面可配置算法研究
IDT推出超紧凑型无线电源接收器,可节省70%板面积