Activity生命周期
来源:互联网 发布:网络教育的大专有用吗 编辑:程序博客网 时间:2024/05/16 01:34
一、Activity简介
一个Activity是一个应用程序组件,提供一个屏幕,用户可以与之交互来完成某项任务,例如拨号、拍照、发送email、看地图。
每一个activity被给予一个窗口,在上面可以绘制用户接口。窗口通常充满屏幕,但也可以小于屏幕而浮于其它窗口之上。
一个应用程序通常由多个activities组成,他们通常是松耦合关系。 通常,一个应用程序中的activity被指定为"main"activity,当第一次启动应用程序的时候将会显示在屏幕上。每次一个新的activity启动,前一个activity就停止了,由系统在一个叫“backstack”的栈上保存activity。当一个新activity启动时,这个activity被推送到栈顶,取得用户焦点。Back Stack符合简单“后进先出”原则,所以,当用户完成当前activity然后点击back按钮,它被弹出栈(并且被摧毁),然后之前的activity恢复。
一个Activity的用户界面是由一组由View class派生的view对象组成。每个view控制Activity窗口的特定矩形空间,以响应用户交互。Android提供了大量原生的view类,用户可以使用这些类设计和组织布局。
二、Activity生命周期
一个Activity可以基本上存在三种状态:
1、Resumed(恢复):activity位于屏幕的前端,并且拥有用户的焦点(focus)
2、Paused(暂停):另一个Activity在屏幕前,取得焦点,但这个Activity仍然可见,失去了用户的焦点。 这个activity进入Paused状态。这个Activity对象仍在内存中 ,它包含状态和成员信息,但是系统在内存不足的情况下可以销毁这个Activity。
3、Stopped(停止):这个Activity完全不可见,但是这个Activity仍然存在(对象保留在内存中,它保持状态和成员信息,但不和窗口管理器(the window manager)有关联),在内存不足时,系统可以销毁这个Activity。
一个Activity的3个生命周期:
1、完整的生命周期(entire lifetime):从系统回调函数onCreate()方法到onDestroy()的过程称为完整的生命周期。
2、可见的生命周期(visible lifetime):从系统回调函数onStart()方法到onStop()方法的过程。在这个生命周期内,这个activity是可见的,用户可以与之交互。由于activity会在可见与不可见之间多次切换,系统可能会多次调用onStart()方法和onStop()方法。
3、前台生命周期(foreground lifetime):从系统回调函数onResume()方法到onPause()方法。在这个生命周期内,这个actvity在屏幕的前端,并且拥有用户焦点。由于这个状态可能会多次重复,因此这两个方法中代码应当是轻量级的。
三、Activity周期的回调方法的总结
:Activity第一次被创建时调用,如果是activty被系统销毁后重建,这个方法可以通过传入的Bundle对象恢复之前Activity的状态。onCreate()
:当一个Activity已经处于stopped状态,准备重新调用onStart()方法之前调用。onRestart()
:在activity变得可见之前调用这个方法。onStart()
:在Activity获得焦点之前调用。这时候,这onResume()
个Activity在activity stack的栈顶。
:当系统准备resume另外一个activity时调用这个方法。这个方法通常用来保存一些persistent data(持久的数据)。onPause()
:当这个activity不再可见的时候调用这个方法。onStop()
:在这个activity销毁前调用这个方法。onDestroy()
当activity A启动activity B时产生的调用顺序如下:
1、activity A执行
方法onPause()
2、activity B执行
方法、onCreate()
方法和
onStart()
方法onResume()
3、然后,如果ActivityA 已不再是显示在屏幕上,它执行
方法onStop()
四、保存activity状态
前面提到在一个activity暂停或者停止的时候,activity的状态仍然是保存在内存中的,但是如果系统由于内存不足销毁了这个acitivity对象时,这时候用户如果想回到那个activity对象时,系统就会重建这个activity对象,而此时用户可能更关心的是activity之前的状态。在这种情况下,我们必须通过实现一个额外的回调函数onSaveInstanceState()
,通过这个回调函数来保存哪个activity的一些重要信息。
onSaveInstanceState()
这个回调方法在activity变得不稳定前会被调用。系统会给这个方法传递一个Bundle对象,在这个对象里,你可以通过name-alue pairs(名字-值队的方式)方式来保存一些状态信息。例如使用putString()
andputInt()
方法。随后如果系统销毁这个activity对象,当系统重建这个activity对象时,在onCreate()
和onRestoreInstanceState()
方法中会传递上面提到的Bundle对象。使用这两个方法中任意一个方法来回复之前activity的状态。如果没有状态信息需要恢复,这个Bundle对象将是null。
注意:Activity被销毁之前不保证 onSaveInstanceState() 会调用,因为有些情况下,它不需要保存状态(例如,当用户使用“后退“ 按钮离开Activity的时候,因为用户已明确关闭的Activity)。如果是系统调用onSaveInstanceState() ,那么他会在 onStop()前也可能在onPause()前调用。
即使我们实现onSaveInstanceState()
方法,有些activity的状态会由activity对象的默认onSaveInstanceState()
实现自动恢复。尤其是布局上的view对象保存的一些信息会由默认onSaveInstanceState()
实现自动保存。当然这里面需要你为view对象提供一个独一无二的id,如果没有ID,系统是不会为其保存状态的。
因此当我们实现默认onSaveInstanceState()
方法时,最好要调用系统的默认实现。同样
也是如此。onRestoreInstanceState()
方法
由于onSaveInstanceState()
方法并不保证一定会被调用,因此我们在使用它的时候仅仅会记录一些the transient state (瞬时的状态)of the activity (the state ofthe UI),而不应该保存persistent data(持久性数据)。我们应当在onPause()
保存persistent data。
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity 生命周期
- activity生命周期
- Activity 生命周期
- Activity生命周期
- Activity生命周期
- Activity生命周期
- json
- arm-linux-gcc安装 和 环境变量设置
- Java @Override 详解
- Windows下查看进程对应的应用程序
- windows下如何用java命令运行jar包?
- Activity生命周期
- 【Linux Device Driver】—(3.1)—ioctl——原理
- 爱情如江南的青花瓷
- jquery切换元素的可见状态
- 4417 hdu Super Mario
- 如何修改SQLPLUS提示符 .
- 缓存系列:ASP.NET 2.0缓存
- (2期)通过使用脚本,实现在LandaV8里面新增字段
- C语言数组首地址问题