Activity生命周期与状态保存

弹出系统对话框,程序仍部分可见

onPause

对话框消失时

onResume

 

调用一个新的Activity,老的Activity不可见时

onPause->onStop

重新的Activity返回时

onRestart->onStart->onResume

 

正常运行的Activity正常结束时

onPause->onStop->onDestroy

 

onResume

这不是用来判断Activity是否对用户可见的最好方法。即便这个方法被调用后,也可能有一些系统窗口在咱们的Activity前面,如keyguard。onWindowFocusChanged是最准确的。

对于一些没有经过相似managedQuery(android.net.Uri , String[], String, String[], String)这样的方法交给系统管理的Cursor来讲,这个时候应该从新获取。由于,按照理论来讲,在onStop时,你把它们deactive了。

 

假设Activity A启动一个Activity B,那么,系统会先调用A的onPause,而后调用B的onCreate、onStart、onResume。而后才会调用A的onStop方法。

所以,在旧的Activity的onPause返回以前,新的Activity不会被建立。所以,这里不要作太费时的事情。

onPause方法中建议作的操做有:中止动画这样大量消耗CPU的动做,使Activity的切换更快速;关掉相机这样独占式访问的资源。

 

后台Activity由于资源紧张被系统终止时,不管是否可见,都不会调用任何方法,除onSaveInstanceState。

 

经过android.os.Process.killProcess杀死时,不会调用任何方法,包括onSaveInstanceState.

 

 

关于状态保存:android

onSaveInstanceState动画

当Activity被切换到后台(部分可见或者不可见,但己不与用户交互)时,就有可能由于资源紧张而被kill,会调用这个方法。spa

若是这个方法被调用的话,会在onStop以前,但与onPause谁先谁后不肯定。.net

这个方法的默认实现中,保存了当前可见的View树的状态,重写时,若是要保留这个特性的话,调一下super.onSaveInstanceState。xml

 

onRestoreInstanceState生命周期

这个方法在onStart和onResume之间被调用。资源

绝大部分状况下,使用onCreate就能够恢复上一次保存的状态 it

 

旋转屏幕的时候须要对一些数据进行保存。有以下方法:io

 1.AndroidManifest.xml配置文件中的Activity标签下面添加:android:configChanges="orientation|keyboardHidden"后台

而后在activity中重写onConfigurationChanged()方法,每次旋转时会调用该方法,能够再该方法中处理数据[不管你怎么旋转都不会销毁当前的Activity,只会执行onConfigurationChanged()方法,所以只要在该方法中处理响应的数据便可

生命周期以下:

onCreate->onStart->onResume->onConfigurationChanged()->

onConfigurationChanged() 

2. 若是销毁当前的Activity,那么就要重写Activity的两个方法onSaveInstanceState()和 onRestoreInstanceState(),显然从方法名字能够看出一个是保存

数据,一个是还原数据,生命周期以下:

 onCreate->onStart->onResume->onSaveInstanceState

->onPause->onStop->onDestroy->onCreate->onStart

->onRestoreInstanceState->onResume 

相关文章
相关标签/搜索