Activity组件作为Android4大组件之一,可以表示应用的一个界面,在Android系统中起着十分重要的作用。简单地说,我们在应用中看到的每一个界面,都可以认为是一个Activity。Ac-tivity也可以理解为“活动”,一个Activity从创建到销毁的过程称为Activity的生命周期,即一个“活动”开始,代表Activity组件启动;“活动”结束,代表Activity的生命周期结束。
1.Activity的生命周期
一个Activity的对象的生命周期可类比于人的生命周期,不同阶段需要做对应的事。这就使得一个Activity从创建到销毁的生命周期中,存在4种不同的状态,7个生命周期函数和3个生存期。
(1)Activity的4种状态
1)Resumed:Activity对象处于运行状态,置于屏幕的最前端。
2)Paused:另一个Activity位于前端,该Activity被覆盖但是可见。此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。
3)Stopped:另一个Activity位于前端,完全遮挡之前的Activity。
4)Killed:Activity被系统杀死回收或者没有被启动。
(2)Activity的7个生命周期函数(见表7-2)
表7-2 Activity生命周期函数
以上7个方法中除了onRestart之外,其他都是两两相对的,从而又可以将活动分为三种生存期。
1)完整生存期。活动在onCreate方法和onDestroy方法之间所经历的过程,就是完整生存期。一般情况下,一个活动会在onCreate方法中完成初始化操作,而在onDestroy方法中结束活动并销毁,从而释放内存。
图7-32 Activity生命周期图
2)可见生存期。活动在onStart方法和onStop方法之间所经历的过程,就是可见生存期。在可见生存期内,活动对于用户总是可见的,即便有可能无法和用户进行交互。
3)前台生存期。活动在onResume方法和onPause方法之间所经历的过程,就是前台生存期。在前台生存期内,活动总是处于运行状态的,此时的活动是可以和用户进行相互的,我们平时看到和接触最多的也在这个状态下的活动。
为了更好地理解Activity的生命周期,可以认真研读活动生命周期示意图,如图7-32所示。
activity启动时:onCreate→onStart→on-Resume。
为了方便说明,这里把当前activity称为Activity1,其他的activity称为Activity2、Activity3,等等。
从图7-32可以看出,activity从run-ning状态跳转到onPause状态的原因是:有另外一个actvity被启动并运行,比如Activity1通过startActivity启动了Activity2,那么Activity2就处于UI视图的最顶层,而Activity1不再是最顶层的activity,此时就会onPause,此时Activity1已经站在他人之后。
当Activity1完全被Activity2挡住,完全看不见时,Activity1就会onStop。从图7-32中看到,从onPause到onStop的原因是:此时Activity1完全不可见,可以理解为按下home键时,当前activity就会处于onStop的状态。
从图7-32中可以看出activity是可以停留在onPause和onStop这两个状态上,可以相应的恢复。
当在Activity1退出时,Activity1就会走到onDestory。
一旦Activity走到onDestory,若恢复只能onCreate→onStart→onResume。
2.界面的切换(www.xing528.com)
Activity的界面切换是应用中必不可缺的,是实现从一个界面跳转到另一个界面的过程。按照实现的方法不同,大致上可以分为两种:启动新的Activity实现界面切换和改变XML文件实现界面切换。
1)启动新的Activity实现界面切换。对于这种方法分三步:第一步:创建Intent对象;第二步:通过setClass()方法指定当前界面和要跳转到的界面,第一个参数为当前界面,第二个参数是要跳转到的界面;第三步:用当前的Activity调用starActivity()实现界面的切换。
首先了解Intent,Intent可以理解为“意图”,是Android程序中各组件之间进行交互的一种重要方式,它不仅可以指明当前组件想要执行的动作,还可以在不同组件之间传递数据。Intent一般可被用于启动活动、启动服务以及发送广播等场景。Intent有多个构造函数的重载,其中一个是Intent(Context packageContext,Class<?>cls)。这个构造函数接收两个参数,第一个参数Context要求提供一个启动活动的上下文,第二个参数Class则是指定想要启动的目标活动,通过这个构造函数就可以构建Intent的“意图”。Activity类中提供了一个startActivity()方法,这个方法是专门用于启动活动的,它接收一个Intent参数,这里将构建Intent传入startActivity()方法就可以启动目标活动。
下面对启动新的Activity实现界面切换举简单的例子进行分析:
先新建一个second_layout.xml布局文件,定义一个按钮,按钮显示Button2。代码如下:
再次,在AndroidManifest.xml中对SecondActivity进行注册,代码如下:
最后,对FirstActivity中按钮的单击事件进行修改。首先需要构建一个Intent,传入FirstAc-tivity.this作为承接,传入SecondActivity.class作为目标活动,这样的“意图”就非常明显,即在FirstActivity活动的基础上打开SecondActivity活动,然后通过startActivity()方法来执行Intent。代码如下:
就这样,已经成功启动SecondActivity活动,实现了界面的切换。如图7-33所示。
图7-33 界面切换图
2)改变XML文件实现界面切换。改变XML文件实现界面切换,可以把它看作重新设置界面的布局文件。这个方法的实质就是在监听事件实现的函数,重新调用setContentView方法,来改变界面的布局——比如,界面上有一个按钮,要实现用户单击这个按钮,就改变一下界面布局,来达到界面切换的效果。
可以分两步骤来实现这种方法:
1)创建一个xml布局文件。
2)通过触发某一个控件(如Button),该控件已经加载监听器,监听器通过setContentView函数切换界面布局。
这样实现整个过程都是在一个Activity上实现,因此所有变量都可
以在Activity状态中获得。
先定义两个按键,通过单击按键1跳转到按键2。
按键1:
这样,就可以通过按下按键1,跳转到按键2的界面,实现了界面的切换。如图7-34所示。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。