实验2Activity组件的生命周期Word文档格式.docx

上传人:b****6 文档编号:21834574 上传时间:2023-02-01 格式:DOCX 页数:11 大小:166.64KB
下载 相关 举报
实验2Activity组件的生命周期Word文档格式.docx_第1页
第1页 / 共11页
实验2Activity组件的生命周期Word文档格式.docx_第2页
第2页 / 共11页
实验2Activity组件的生命周期Word文档格式.docx_第3页
第3页 / 共11页
实验2Activity组件的生命周期Word文档格式.docx_第4页
第4页 / 共11页
实验2Activity组件的生命周期Word文档格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

实验2Activity组件的生命周期Word文档格式.docx

《实验2Activity组件的生命周期Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验2Activity组件的生命周期Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。

实验2Activity组件的生命周期Word文档格式.docx

所以它仍然可见,但已经失去了焦点故不可与用户进行交互。

3、Stoped

如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。

它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统存需要被用在其他地方的时候,Stopped的Activity将被强行终止掉。

4、Killed

如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接终止它的进程。

当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。

状态转换

当一个Activity实例被创建、销毁或者启动另外一个Activity时,它在这四种状态之间进行转换,这种转换的发生依赖于用户程序的动作。

图2.1说明了Activity在不同状态间转换的时机和条件:

图2.1.Activity的状态转换

如图2.1所示,Android程序员可以决定一个Activity的“生”,但不能决定它的“死”,也就时说程序员可以启动一个Activity,但是却不能手动的“结束”一个Activity。

当你调用Activity.finish()方法时,结果和用户按下BACK键一样:

告诉ActivityManager该Activity实例完成了相应的工作,可以被“回收”。

随后ActivityManager激活处于栈第二层的Activity并重新入栈,同时原Activity被压入到栈的第二层,从Active状态转到Paused状态。

例如:

从Activity1中启动了Activity2,则当前处于栈顶端的是Activity2,第二层是Activity1,当我们调用Activity2.finish()方法时,ActivityManager重新激活Activity1并入栈,Activity2从Active状态转换Stoped状态,Activity1.onActivityResult(intrequestCode,intresultCode,Intentdata)方法被执行,Activity2返回的数据通过data参数返回给Activity1。

Activity栈

Android是通过一种Activity栈的方式来管理Activity的,一个Activity的实例的状态决定它在栈中的位置。

处于前台的Activity总是在栈的顶端,当前台的Activity因为异常或其它原因被销毁时,处于栈第二层的Activity将被激活,上浮到栈顶。

当新的Activity启动入栈时,原Activity会被压入到栈的第二层。

一个Activity在栈中的位置变化反映了它在不同状态间的转换。

Activity的状态与它在栈中的位置关系如图2.2所示:

图2.2.Activity的状态与它在栈中的位置关系

如图2.2所示,除了最顶层即处在Active状态的Activity外,其它的Activity都有可能在系统存不足时被回收,一个Activity的实例越是处在栈的底层,它被系统回收的可能性越大。

系统负责管理栈中Activity的实例,它根据Activity所处的状态来改变其在栈中的位置。

Activity中有7个与生命周期有关的函数。

其中onCreate()是Activity第一次启动时执行,主要是初始化一些变量,绑定数据或恢复信息等;

onStart()是Activity界面被显示出来的时候执行;

onRestart()是当前Activity重新被启动时调用;

onResume()是当该Activity与用户能进行交互时被执行;

onPause()是另一个Activity被启动,当前的Activity就被暂停了,一般在该函数中执行保存当前的数据或资源;

onStop()表示另一个Activity被启动完成时,当前Activity对用户完全不可见时才调用;

onDestroy()是退出当前Activity时调用的,另外,如果程序中调用finish()或者Android系统当前资源不够用时也会被调用。

这7个生命周期函数的调用顺序如图2.3所示。

图2.3Activity生命周期函数的调用顺序(状态转换的方法与实现)

在图2.3中,Activity有三个关键的循环:

1.整个的生命周期,从onCreate(Bundle)开始到onDestroy()结束。

Activity在onCreate()设置所有的“全局”状态,在onDestory()释放所有的资源。

某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。

2.可见的生命周期,从onStart()开始到onStop()结束。

在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。

在这两个接口之间,需要保持显示给用户的UI数据和资源等,例如:

可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在onStop()中注销它。

onStart(),onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。

3.前台的生命周期,从onResume()开始到onPause()结束。

在这段时间里,该Activity处于所有Activity的最前面,和用户进行交互。

Activity可以经常性地在resumed和paused状态之间切换,例如:

当设备准备休眠时,当一个Activity处理结果被分发时,当一个新的Intent被分发时。

所以在这些接口方法中的代码应该属于非常轻量级的。

三、实验容

1、创建Activity生命周期程序

在Eclipse中建立Android工程,工程名为LifeCycle,建好后在LifeCycle.java中添加与Activity生命周期有关的函数:

onStart(),onRestart(),onResume(),onPause(),onStop(),onDestroy()。

【参考代码】

Override

protectedvoidonStart(){

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的输出颜色是黑色,任何消息都会输出,这里的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),这里仅显示红色的错误信息。

Log.i(“LIFECYCLE”,“

(2)onStart()”);

代码可参考附录2.

3、打开控制台LogCat窗口

在Eclipse菜单栏上选择Window->

ShowView->

Other,在弹出的窗口中展开Android项,然后选中LogCat,点击OK,如图2.4所示。

图2.4ShowView中选择LogCat

这样,LogCat便显示在Eclipse下方的控制台区域。

如图2.5所示

图2.5Eclipse中的LogCat

为了便于观察,可以设置LogCat过滤器,点击LogCat窗口中SavedFilter部分的绿色加号,打开LogCat信息过滤器设置窗口,设置一个名为LogFilter,过滤条件为“标签名=LIFECYCLE”的过滤器,如图2.6所示。

图2.6LogCat过滤器

4、观察并记录生命周期函数的调用情况

分别在不同情况下运行程序,观察7个Activity生命周期函数的调用情况,同时记录下来。

(1)全生命周期

正常启动LifeCycle程序,然后通过模拟器的返回键关闭程序,观察并记录控制台的输出。

(2)可视生命周期

正常启动LifeCycle程序,然后通过“呼出/接听键”启动置的拨号程序,再通过“返回键”退出拨号程序,重新回到LifeCycle程序,观察并记录控制台的输出。

(3)活动生命周期

正常启动LifeCycle程序,然后通过DDMS工具模拟呼叫,再通过“挂断键”挂断后重新回到LifeCycle程序,观察并记录控制台的输出。

三、思考与练习

1、除了使用log类添加日志点方法之外,还有什么其他方法可以实现类似的效果?

附录1:

MainActivity.java代码如下:

//-------------------------------------------------------------------------------------------------

package.example.lifecycle1;

importandroid.app.Activity;

importandroid.content.Intent;

importandroid.os.Bundle;

importandroid.view.View;

importandroid.view.View.OnClickListener;

publicclassMainActivityextendsActivity{

Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

System.out.println("

firstactivity:

onCreate()"

);

}

protectedvoidonDestroy(){

onDestroy()"

super.onDestroy();

protectedvoidonPause(){

onPause()"

super.onPause();

protectedvoidonRestart(){

onRestart()"

super.onRestart();

protectedvoidonResume(){

onResume()"

super.onResume();

protectedvoidonStart(){

onStart()"

}

protectedvoidonStop(){

onStop()"

super.onStop();

classMyNextActivityimplementsOnClickListener

{

publicvoidonClick(Viewv){

Intentintent=newIntent();

intent.setClass(MainActivity.this,SecondActivity.class);

MainActivity.this.startActivity(intent);

附录2:

importandroid.util.Log;

publicclassMainActivityextendsActivity{

/**Calledwhentheactivityisfirstcreated.*/

Override

publicvoidonCreate(BundlesavedInstanceState){

//setContentView(R.layout.main);

Log.i("

ActivityTest"

"

callonCreate"

Override

protectedvoidonStart(){

callonStart"

protectedvoidonResume(){

callonResume"

protectedvoidonPause(){

callonPause"

protectedvoidonStop(){

callonStop"

protectedvoidonDestroy(){

callonDestroy"

附录3:

SecondActivity.java代码如下:

package.example.lifeone;

//importandroid.view.Menu;

publicclassSecondActivityextendsActivity{

secondactivity:

onCreate()"

setContentView(R.layout.activity_second);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1