activity组件.docx

上传人:b****5 文档编号:2824630 上传时间:2022-11-15 格式:DOCX 页数:14 大小:65.18KB
下载 相关 举报
activity组件.docx_第1页
第1页 / 共14页
activity组件.docx_第2页
第2页 / 共14页
activity组件.docx_第3页
第3页 / 共14页
activity组件.docx_第4页
第4页 / 共14页
activity组件.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

activity组件.docx

《activity组件.docx》由会员分享,可在线阅读,更多相关《activity组件.docx(14页珍藏版)》请在冰豆网上搜索。

activity组件.docx

activity组件

Activity的生命周期

和J2ME的MIDlet一样,在android中,Activity的生命周期交给系统统一管理。

与MIDlet不同的是安装在android中的所有的Activity都是平等的。

Activity的状态及状态间的转换

在android中,Activity拥有四种基本状态:

1.Active/Runing一个新Activity启动入栈后,它在屏幕最前端,处于栈的最顶端,此时它处于可见并可和用户交互的激活状态。

2.Paused当Activity被另一个透明或者Dialog样式的Activity覆盖时的状态。

此时它依然与窗口管理器保持连接,系统继续维护其内部状态,所以它仍然可见,但它已经失去了焦点故不可与用户交互。

3.Stoped当Activity被另外一个Activity覆盖、失去焦点并不可见时处于Stoped状态。

4.KilledActivity被系统杀死回收或者没有被启动时处于Killed状态。

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

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

图1.Activity的状态转换

如上所示,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.Activity的状态与它在栈中的位置关系

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

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

Activity生命周期

在android.app.Activity类中,Android定义了一系列与生命周期相关的方法,在我们自己的Activity中,只是根据需要复写需要的方法,Java的多态性会保证我们自己的方法被虚拟机调用,这一点与J2ME中的MIDlet类似。

publicclassOurActivityextendsActivity{

protectedvoidonCreate(BundlesavedInstanceState);

protectedvoidonStart();

protectedvoidonResume();

protectedvoidonPause();

protectedvoidonStop();

protectedvoidonDestroy();

}

 

这些方法的说明如下:

1. 

a. 

i.protectedvoidonCreate(BundlesavedInstanceState)一个Activity的实例被启动时调用的第一个方法。

一般情况下,我们都覆盖该方法作为应用程序的一个入口点,在这里做一些初始化数据、设置用户界面等工作。

大多数情况下,我们都要在这里从xml中加载设计好的用户界面。

例如:

setContentView(R.layout.main);

 

当然,也可从savedInstanceState中读我们保存到存储设备中的数据,但是需要判断savedInstanceState是否为null,因为Activity第一次启动时并没有数据被存贮在设备中:

if(savedInstanceState!

=null){

savedInstanceState.get("Key");

}

 

1. 

a. 

i.protectedvoidonStart()该方法在onCreate()方法之后被调用,或者在Activity从Stop状态转换为Active状态时被调用。

ii.protectedvoidonResume()在Activity从Pause状态转换到Active状态时被调用。

iii.protectedvoidonResume()在Activity从Active状态转换到Pause状态时被调用。

iv.protectedvoidonStop()在Activity从Active状态转换到Stop状态时被调用。

一般我们在这里保存Activity的状态信息。

v.protectedvoidonDestroy()在Active被结束时调用,它是被结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作。

图3.这些方法的调用时机

此外,Android还定义了一些不常用的与生命周期相关的方法可用:

protectedvoidonPostCreate(BundlesavedInstanceState);

protectedvoidonRestart();

protectedvoidonPostResume();

 

Android提供的文档详细的说明了它们的调用规则。

 

回页首

创建一个Activity

在android中创建一个Activity是很简单的事情,编写一个继承自android.app.Activity的Java类并在AndroidManifest.xml声明即可。

下面是一个为了研究Activity生命周期的一个Activity实例(工程源码见下载):

Activity文件:

publicclassEX01extendsActivity{

privatestaticfinalStringLOG_TAG=EX01.class.getSimpleName();

@Override

publicvoidonCreate(BundlesavedInstanceState){

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Log.e(LOG_TAG,"onCreate");

}

@Override

protectedvoidonStart(){

Log.e(LOG_TAG,"onStart");

super.onStart();

}

@Override

protectedvoidonResume(){

Log.e(LOG_TAG,"onResume");

super.onResume();

}

@Override

protectedvoidonPause(){

Log.e(LOG_TAG,"onPause");

super.onPause();

}

@Override

protectedvoidonStop(){

Log.e(LOG_TAG,"onStop");

super.onStop();

}

@Override

protectedvoidonDestroy(){

Log.e(LOG_TAG,"onDestroy");

super.onDestroy();

}

}

 

AndroidManifest.xml中通过节点说明Activity,将apk文件安装后,系统根据这里的说明来查找读取Activity,本例中的说明如下:

name=".EX01"android:

label="@string/app_name">

name="android.intent.action.MAIN"/>

name="android.intent.category.LAUNCHER"/>

回页首

启动另外一个Activity

Activity.startActivity()方法可以根据传入的参数启动另外一个Activity:

Intentintent=newIntent(CurrentActivity.this,OtherActivity.class);

startActivity(intent);

 

当然,OtherActivity同样需要在AndroidManifest.xml中定义。

 

回页首

Activity之间通信

使用Intent通信

在Android中,不同的Activity实例可能运行在一个进程中,也可能运行在不同的进程中。

因此我们需要一种特别的机制帮助我们在Activity之间传递消息。

Android中通过Intent对象来表示一条消息,一个Intent对象不仅包含有这个消息的目的地,还可以包含消息的内容,这好比一封Email,其中不仅应该包含收件地址,还可以包含具体的内容。

对于一个Intent对象,消息“目的地”是必须的,而内容则是可选项。

在上面的实例中通

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

当前位置:首页 > 求职职场 > 简历

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

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