实验2-Activity组件的生命周期

上传人:ali****an 文档编号:113653908 上传时间:2019-11-09 格式:DOC 页数:10 大小:301KB
返回 下载 相关 举报
实验2-Activity组件的生命周期_第1页
第1页 / 共10页
实验2-Activity组件的生命周期_第2页
第2页 / 共10页
实验2-Activity组件的生命周期_第3页
第3页 / 共10页
实验2-Activity组件的生命周期_第4页
第4页 / 共10页
实验2-Activity组件的生命周期_第5页
第5页 / 共10页
点击查看更多>>
资源描述

《实验2-Activity组件的生命周期》由会员分享,可在线阅读,更多相关《实验2-Activity组件的生命周期(10页珍藏版)》请在金锄头文库上搜索。

1、实验二 Activity组件的生命周期一、实验目的1. 了解Activity组件的生命周期;2. 了解Activity组件的运行状态;3. 掌握Activity事件回调函数的作用和调用关系。二、Activity相关知识 Activity是Android组件中最基本也是最为常见用的四大组件之一(Activity,Service服务,Content Provider内容提供者,BroadcastReceiver广播接收器)。Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。在一个android应用中,一个Acti

2、vity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。 在 android 中,Activity 拥有四种基本状态:1、Active/Runing 一个新 Activity 启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态(active or running)。2、Paused 当 Activity失去焦点, 被一个新的非全屏的Activity 或者一个透明的Activity 被放置在栈顶,此时的状态叫做暂停状态(Pau

3、sed)。此时它依然与窗口管理器保持连接,Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止掉。所以它仍然可见,但已经失去了焦点故不可与用户进行交互。3、Stoped 如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被强行终止掉。4、Killed 如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除

4、,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接终止它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。状态转换 当一个 Activity 实例被创建、销毁或者启动另外一个 Activity 时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。图2.1说明了 Activity 在不同状态间转换的时机和条件:图2.1. Activity 的状态转换 如图2.1所示,Android 程序员可以决定一个 Activity 的“生”,但不能决定它的“死”,也就时说程序员可以启动一个 Activity,但是却不能手动的“结束”

5、一个 Activity。当你调用 Activity.finish()方法时,结果和用户按下 BACK 键一样:告诉 Activity Manager 该 Activity 实例完成了相应的工作,可以被“回收”。随后 Activity Manager 激活处于栈第二层的 Activity 并重新入栈,同时原 Activity 被压入到栈的第二层,从 Active 状态转到 Paused 状态。例如:从 Activity1 中启动了 Activity2,则当前处于栈顶端的是 Activity2,第二层是 Activity1,当我们调用 Activity2.finish()方法时,Activity

6、Manager 重新激活 Activity1 并入栈,Activity2 从 Active 状态转换 Stoped 状态,Activity1. onActivityResult(int requestCode, int resultCode, Intent data)方法被执行,Activity2 返回的数据通过data参数返回给 Activity1。Activity 栈 Android 是通过一种 Activity 栈的方式来管理 Activity 的,一个 Activity 的实例的状态决定它在栈中的位置。处于前台的 Activity 总是在栈的顶端,当前台的 Activity 因为异常或

7、其它原因被销毁时,处于栈第二层的 Activity 将被激活,上浮到栈顶。当新的 Activity 启动入栈时,原 Activity 会被压入到栈的第二层。一个 Activity 在栈中的位置变化反映了它在不同状态间的转换。Activity 的状态与它在栈中的位置关系如图2.2所示:图2.2. Activity 的状态与它在栈中的位置关系 如图2.2所示,除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个 Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。系统负责管理栈中 Activity 的实例,它根

8、据 Activity 所处的状态来改变其在栈中的位置。 Activity中有7个与生命周期有关的函数。其中onCreate()是Activity第一次启动时执行,主要是初始化一些变量,绑定数据或恢复信息等;onStart()是Activity界面被显示出来的时候执行;onRestart()是当前Activity重新被启动时调用; onResume()是当该Activity与用户能进行交互时被执行;onPause()是另一个Activity被启动,当前的Activity就被暂停了,一般在该函数中执行保存当前的数据或资源;onStop()表示另一个Activity被启动完成时,当前Activity

9、对用户完全不可见时才调用;onDestroy()是退出当前Activity时调用的,另外,如果程序中调用finish()或者Android系统当前资源不够用时也会被调用。 这7个生命周期函数的调用顺序如图2.3所示。图2.3 Activity生命周期函数的调用顺序(状态转换的方法与实现)在图2.3中,Activity有三个关键的循环:1. 整个的生命周期,从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则

10、该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。2. 可见的生命周期,从onStart()开始到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等,例如:可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在onStop()中注销它。onStart(),onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。3. 前台的生命周期,从onResume()开始到

11、onPause()结束。在这段时间里,该Activity处于所有 Activity的最前面,和用户进行交互。Activity可以经常性地在resumed和paused状态之间切换,例如:当设备准备休眠时,当一个 Activity处理结果被分发时,当一个新的Intent被分发时。所以在这些接口方法中的代码应该属于非常轻量级的。三、实验内容1、创建Activity生命周期程序在Eclipse中建立Android工程,工程名为LifeCycle,建好后在LifeCycle. java中添加与Activity生命周期有关的函数:onStart (),onRestart(),onResume(),onP

12、ause(),onStop(),onDestroy()。【参考代码】 Override protected void onStart() super.onStart();代码可参考附录1.2、添加日志点向步骤1中建立的LifeCycle. java中相关的生命周期函数添加日志点,使用Android中的Log类可以实现添加日志点。android.util.Log常用的方法有5个,分别为:Log.v(),Log.d(),Log.i(),Log.w()以及Log.e()。根据首字母分别对应VERBOSE,DEBUG,INFO,WARN,ERROR,对应的优先级也是由低到高。说明:(1)Log.v 的

13、输出颜色是黑色,任何消息都会输出,这里的v代表verbose,表示详细信息,用法是Log.v(参数1,参数2),参数1是标签,参数2是提示信息;(2)Log.d的输出颜色是蓝色,输出调试信息(debug),也会显示i、w和e的信息;(3)Log.i的输出颜色是绿色,一般提示性的消息(information),它不会输出Log.v和Log.d的信息,但会显示i、w和e的信息;(4)Log.w的输出颜色是橙色,可以看作为警告信息(warning),同时它还会输出Log.e的信息。(5)Log.e的输出颜色是红色,可以想到是错误信息(error),这里仅显示红色的错误信息。【参考代码】 Overri

14、de protected void onStart() super.onStart(); Log.i(“LIFECYCLE”, “(2) onStart()”);代码可参考附录2.3、打开控制台LogCat窗口在Eclipse菜单栏上选择Window - Show View - Other,在弹出的窗口中展开Android项,然后选中LogCat,点击OK,如图2.4所示。图2.4 Show View中选择LogCat这样,LogCat便显示在Eclipse下方的控制台区域。如图2.5所示图2.5 Eclipse中的LogCat为了便于观察,可以设置LogCat过滤器,点击LogCat窗口中S

15、aved Filter部分的绿色加号,打开LogCat信息过滤器设置窗口,设置一个名为LogFilter,过滤条件为“标签名=LIFECYCLE”的过滤器,如图2.6所示。图2.6 LogCat过滤器4、观察并记录生命周期函数的调用情况分别在不同情况下运行程序,观察7个Activity生命周期函数的调用情况,同时记录下来。(1)全生命周期 正常启动LifeCycle程序,然后通过模拟器的返回键关闭程序,观察并记录控制台的输出。(2)可视生命周期正常启动LifeCycle程序,然后通过“呼出/接听键”启动内置的拨号程序,再通过“返回键”退出拨号程序,重新回到LifeCycle程序,观察并记录控制台的输出。(3)活动生命周期 正常启动LifeCycle程序,然后通过DDMS工具模拟电话呼叫,再通过“挂断键”挂断电话后重新回到LifeCycle程序,观察并记录控制台的输出。三、思考与练习1、除了使用log类添加日志点方法之外,还有什么其他方法可以实现类似的效果?附录1:MainActivity.java代码如下:/-

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号