]。
2.3 Android布局管理器
Android本身是一个权限分立的操作系统。在这类操作系统中,每个应用都以唯一的该系统主要用到的布局有线性布局,帧布局和相对位置布局。
(1)LinearLayout类
线性布局是最简单的布局之一。android:orientation可以设置线性布局的朝向,可以是水平(horizontal)或者垂直(vertical)两种排列方式。同时使用android:gravity设置控件的对齐方式,还可以通过设置控件的weight参数控制各个控件在容器中的相对大小。
(2)FrameLayout类
FrameLayout帧布局在屏幕上开辟出了一块区域,在这块区域上可以添加多个子控件,但是所有的子控件都被对齐到屏幕的左上角。帧布局的大小由子控件尺寸最大的那个子控件来决定。如果子控件一样大,同一时刻只能看到最上面的子控件,因为在FrameLayout中,子控件是通过栈来绘制的[5]。
(3)RelativeLayout类
RelativeLayout相对位置布局,即子控件的位置可以取决于兄弟控件或父控件的位置,与Linearlayout相比,可以减少嵌套,避免生成不要的对象,代码简洁,是本程序中主要使用的布局。
2.4 Android四大基本组件
Android四大基本组件分别是Activity,Service服务,ContentProvider内容提供者,BroadcastReceiver广播接收器。
2.4.1 关于Activity
Activity是android最常用的组件,是应用程序的表示层,Activity一般通过View来实现应用程序的用户界面,相当于一个屏幕,用户与程序的交互是通过该类实现的。
Activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上,当activity指向全屏窗口时,也可以用其他方式实现:作为漂浮窗口(通过windowIsFloating的主题集合),或者嵌入到其他的activity,使用ActivityGroup[6]。
Android平台是个手机作业系统。撇掉其他功能不谈,手机的特性,就是应该能随时在未完成目前动作的时候,暂停正在使用的功能,切换到接电话、接收短信模式,而且在接完电话回到应用程序时,还希望能看到一样的内容。现在用户使用智能手机,大多已习惯使用多工的作业系统(如windowsMobile),可以在用手机听音乐的同时,执行其他多个程序。同时执行多个程序有它的明显好处,但也有它的缺点。每多执行一个应用程序,就会多耗费一些系统内存,而手机里的内存是相当有限的。当同时执行的程序过多,或是关闭的程序没有正确释放掉内存,系统运行时就会觉得越来越慢,甚至不稳定。为了解决这个问题,Android引入了一个新的机制-生命周期。
Android应用程序的生命周期是由Android框架进行管理,而不是由应用程序直接控制。通常,每一个应用程序(入口一般会是一个活动的onCreate方法),都会占据一个进程。当系统内存即将不足的时候,会依照优先级自动进行进程的回收。不管是使用者或开发者,都无法确定应用程序何时会被回收。关于进程的生命周期将在下一节中介绍,本节主要介绍活动的生命周期。
一个活动类别除了OnCreate方法之外,还预先定义了onPause(暂停)、OnResume(继续)等的基本方法,当从一个活动切换到另一个活动的时候,原来的活动将经过一连串的状态改变。开发者可以在程序中添加一些各状态相对应的流程,每次活动状态改变时,就会执行相对应的流程。要让用户有好的使用体验,活动需要在各个周期中负责保管状态、恢复状态、传送资料等工作。
Android的虚拟机是使用堆栈管理。主要有四种状态:
(1)活动状态
活动状态是指用户启动应用程序或活动后,活动运行中的状态。在Android平台上,同一个时刻只会有一个活动处于活动或运行状态。其他的活动都处于未启动、停止或是暂停的状态。
(2)暂停状态
暂停状态是指当活动暂时暗下来,退到背景画面的状态。当警告对话框或电话来了时,都会让原来运行的活动退到背景画面。新出现的警告对话框等界面元件盖住了原来的活动画面。活动处在暂停状态时,用户无法与原活动互动。
(3)停止状态
停止状态是指有其他活动正在执行,而这个活动己经离开屏幕,不再动作的状态。通过按返回键,可以调出所有处于停止状态的应用程序列表。处于停止状态的活动,还可以通过通知来唤醒。
(4)已回收或未启动状态
已回收或未启动状态是指活动尚未被启动、已经被手动终止或己经被系统回收的状态。要手动终止活动,可以在程序中调用finish方法。如果是被系统回收,可能是因为内存不足了,所以系统根据内存不足时的回收规则,将处于停止状态的活动所占用的内存回收。
图2-2所示的七个状态又可以归纳成三组:
(1)资源分配(创建/销毁)
完整的活动生命周期由创建状态开始,由销毁状态结束。创建时分配资源,销毁时释放资源。
(2)可见与不可见(启动/重新启动/停止)
当活动运行到启动状态时,就可以在屏幕上看到这个活动。相反地,当活动运行到停止状态时,这个活动就会从屏幕上消失。当用户按下返回键回到上一个活动时,会先到重新启动状态,再到一般的启动状态。
(3)用户取得屏幕的控制权(继续/暂停)
当有个警告对话框、短信、电话等信息进入时,原来的活动会进入暂停状态,暂时放弃屏幕的控制权,被中断到背景去,将前景交给优先级高的事件。当这些优先级高的事件处理完后,活动就改进入继续状态,此时又取得屏幕的控制权。
图2-2 Activity生命周期
由实际运行来看,我们可以归纳出所有Android应用程序都遵循的运作流程:
(1)一般启动
启动一个活动的基本流程为onCreate→onstart→onResume。该流程首先分配资源给这个活动(创建状态),然后将活动的内容显示到屏幕上(启动状态);在一切就绪后,取得屏幕的控制权(恢复状态),用户可以开始使用这个程序。
(2)调用另一个活动
调用另一个活动的基本流程为onause(1)→onCreate(2)→onstart(2)→0nResume(2)→
onStop(1)。该流程首先冻结原来的活动,再交出屏幕控制权;直到活动2完成一般启动流程后,活动1才会被停止。
(3)回到原来活动
回到原来活动的基本流程为onPause(2)→onRestart(1)→onstart(1)→onResume(1)→
onstop(2)→onDestroy(2)。另外按返回键也可以回到原来的活动。
(4)退出结束
退出结束的基本流程为onPause→onStop→onDestroy。如果程序中有直接调用finish方法来关闭活动的话,系统会跳过先冻结的阶段,直接暂停,停止,然后销毁。
(5)回收后再启动
回收后再启动的基本流程为oncreate→onstart→onresume。如果被回收掉的活动一旦又重新被调用时,会像一般启动一样再次调用活动的onCreate方法。
当在模拟器上已经执行过多个应用程序,只要按下返回键,就会开启最近一次开启过的活动。所以如果要让再次被创建的活动跟原来开启过的一样,那么在活动之间切换时,就要保存资料:即在每次活动运行到暂停或停止状态时先保存资料,然后在创建时将资料读出来。
2.4.2 关于Service服务
一个Service 是一段长生命周期的,没有用户界面的程序,可以用来开发如监控类程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个 activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐 应该还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service
上一篇:
基于Android的洛阳“本地通”旅游向导平台移动客户端
下一篇:
试论APP广告在手机中的应用