您的位置:首页 > 其它

Activity的生命周期

2016-03-27 19:01 148 查看
1、activity生命周期?(最基本的)

onCreate(Bundle savedInstanceState):创建activity时调用。设置在该方法中,还以Bundle的形式提供对以前储存的任何状态的访问!

onStart():activity变为在屏幕上对用户可见时调用。

onResume():activity开始与用户交互时调用(无论是启动还是重新启动一个活动,该方法总是被调用的)。 onPause():activity被暂停或收回cpu和其他资源时调用,该方法用于保存活动状态的,也是保护现场,压栈吧!

onStop():activity被停止并转为不可见阶段及后续的生命周期事件时调用。

onRestart():重新启动activity时调用。该活动仍在栈中,而不是启动新的活动。
OnDestroy():activity被完全从系统内存中移除时调用该方法

Activity有很多子类,可以用其子类创建不同的界面。

Activity启动其他Activity有两种方法:

1.startActivity(Intent intent)

2.startActivityForResult(Intent intent,int requestCode):指定一个请求码并且可以得到新启动的activity返回的结果。

关闭Activity有两种方法:

1.finish();

2.finishActivity(int requestCode):结束以startActivityForResult启动的Activity.

使用Bundle在Activity之间交换数据

使用Activity之间的信使:intent来携带数据:

intent提供了多个重载的方法来携带额外的数据,如下所示:

1.putExtras(Bundle data):向intent中放入需要携带的数据包。

2.Bundle getExtras():取出intent所携带的包

3.putExtra(String name,Xxx value):向intent中按key-value对的形式存入数据。

getXxxExtra(String name):从intent中按类型取出数据。

其中Bundle就是一个简单的数据携带包,该Bundle对象包含了多个方法来存入数据。

1.putXxx(String key,Xxx data):向Bundle放入int .long等类型的数据。

2.putSerializable(String key,Serializable data):向Bundle中放入一个可序列化的对象。

3.getXxx(String key):从Bundle取出各种类型的数据。

4.getSerializable(String key,Serializable data):从Bundle中取出一个可序列化的对象。

我们可以发现,其实activity之间传递数据也就两种方式,第一是通过Bundle;第二个是直接通过键值对,其实第二种方式只是第一种方式的简写,这种简写方式也是通过Bundle方式来存数据的,当存数据时,如果该intent中已经有了Bundle对象,则直接存,如果没有,则先创建一个Bundle对象,然后再存。

在接收端的Activity用getIntetn()得到传过去的Intent对象。

使用startActivityForResult启动一个新Activity并返回结果。

为了获取返回的结果,需要从两个方面着手:

1.当前Activity需要重写onActivityResult(int requestCode,int resultCode,Intent intent),当被启动的Activity返回结果时,该方法将会被触发,其中resquestCode代表请求码,resultcode代表返回码,这个结果码也是由开发者根据业务自行设定的。

2.被启动的Activity需要调用setResult()方法设置处理结果。

Activity的回调机制:

对于Activity来说,当它被开发出来之后,我们只需要在清单文件中配置即可,至于它何时被实例化,何时被调用,对于程序员来说是透明的。

4.3Activity的生命周期与加载模式:

当Activity处于android应用中运行时,他的活动状态有android以Activity栈的形式管理,当前活动的Activity位于栈顶,随着不同应用的运行,每个Activity都有可能从活动状态转入非活动状态,也可能从非活动状态转入活动状态。

归纳起来Activity大致会经过如下4个状态:

1.活动状态:当前Activity位于前台,用户可见,可以获得焦点。

2.暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点。

3.停止状态:Activity不可见,失去焦点。

4.销毁状态:Activity结束,或Activity所在的Dalvik进程被结束。

Activity中的周期方法:

1.onCreate():此方法一个周期只使用一次,相当于人只能出生一次。

2.onRestart():如果执行了onStop(),又想回到界面,此方法会执行。

3.onStart():此方法一开,界面就会显示出来,但没有焦点。

4.onResume():此方法一开,此Activity就处于活动状态,能操作,有焦点。

5.onPause():此方法一开,会失去焦点。

6.onStop():此方法一开,界面会看不见。

7.onDestroy():此方法一开,Activity就死啦。

Activity的四种加载模式:

我们在清单文件中配置Activity时,可以指定android:launchMode属性,该属性就是用于配置该Activity的加载模式,该属性支持如下4个属性值。

1.standard:标准模式,是默认的。

2.singleTop:Task顶单例模式。

3.singleTask:Task内单例模式。

4.singleInstance:全局单例模式。

android是如何管理Activity的呢?

答:android是通过Task来对Activity进行管理的,我们可以把Task理解为栈。

那么Activity的加载模式,就负责管理实例化,加载Activity的方式,并可以控制Activity与Task之间的加载关系。

1.standard模式

这种模式,每次开启一个Activity,都会进行实例化,然后加载到Task中,不会启动新的Task。

2.singleTop模式

当将要创建的目标已经位于栈顶时,系统不会重新创建目标,而是直接复用已经存在的Activity实例。

3.singleTask模式

这种模式在同一个Task内只有一个实例,当采用这种模式时,可以分为以下三种情况:

1.如果将要启动的目标不存在,系统会创建Activity的实例,并将Activity加到栈顶。

2.如果Activity的实例已经存在,则该模式和singleTop模式一样。

3.如果Activity实例已经存在,并且不再栈顶,那么该模式会移除Activity实例上的所有东西,使得Activity在栈顶。

4.singleInstance模式

也是分两种情况:

1.如果要启动的目标Activity不存在,系统会创建一个全新的Task,在创建目标Activity的实例,并将他们加入新的Task栈顶。

2.如果Activity存在,则无论Activity位于那个程序,位于那个Task,都会把它转到前台,显示出来。

Activity的四种加载模式:

我们在清单文件中配置Activity时,可以指定android:launchMode属性,该属性就是用于配置该Activity的加载模式,该属性支持如下4个属性值。

1.standard:标准模式,是默认的。

2.singleTop:Task顶单例模式。

3.singleTask:Task内单例模式。

4.singleInstance:全局单例模式。

android是如何管理Activity的呢?

答:android是通过Task来对Activity进行管理的,我们可以把Task理解为栈。

那么Activity的加载模式,就负责管理实例化,加载Activity的方式,并可以控制Activity与Task之间的加载关系。

1.standard模式

这种模式,每次开启一个Activity,都会进行实例化,然后加载到Task中,不会启动新的Task。

2.singleTop模式

当将要创建的目标已经位于栈顶时,系统不会重新创建目标,而是直接复用已经存在的Activity实例。

3.singleTask模式

这种模式在同一个Task内只有一个实例,当采用这种模式时,可以分为以下三种情况:

1.如果将要启动的目标不存在,系统会创建Activity的实例,并将Activity加到栈顶。

2.如果Activity的实例已经存在,则该模式和singleTop模式一样。

3.如果Activity实例已经存在,并且不再栈顶,那么该模式会移除Activity实例上的所有东西,使得Activity在栈顶。

4.singleInstance模式

也是分两种情况:

1.如果要启动的目标Activity不存在,系统会创建一个全新的Task,在创建目标Activity的实例,并将他们加入新的Task栈顶。

2.如果Activity存在,则无论Activity位于那个程序,位于那个Task,都会把它转到前台,显示出来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: