标签:
Activity正常情况下的生命周期:
1. 一个Activity的正常启动: onCreate --> onStart --> onResume
2. A(Activity)打开新的B(Activity)或者用户按住Home键切换到主界面,当前Activity所调用的方法: onPause --> onStop
3. 此时在重新回到A(Activity)所调用的方法: onRestart --> onStart --> onResume
4, 当在A(Activity)用户按 back 键回退时,回调方法:onPause --> onStop --> onDestroy
那么刚刚说了正常情况下的Activity,下面就来说说异常情况下的Activity,Activity异常情况:当资源相关的系统配置发生改变(横竖屏的切换)以及内存不足时,Activity就可能被杀死。
异常情况不得不提的两个方法:onSaveInstanceState 和 onRestoreInstanceState
这两个方法,在某个Activity发生异常情况时,调用。
意外销毁:Activity --> 意外情况 --> onSaveInstanceState --> onDestroy (这是Activity异常销毁才会调用,正常情况下不会调用此方法)
重新创建:Activity --> onCreate --> onStart --> onRestoreInstanceState 当Activity被重新创建后,系统会调用 onRestoreInstanceState ,并且将Activity销毁时,调用 onSaveInstanceState 保存的 Bundle 对象作为参数传入 ,我们可以通过判断 Bundle对象是否为空,来判断Activity是否异常终止。
Activity的启动模式: Standard 、 SingleTop 、 SingleTaslk 、 SingleInstance
1. Standard :标准模式,每次启动一个Activity都会重新创建一个新的Activity的实例,放入任务栈的栈顶,无论栈里面是否有此Activity的实例。
2. SingleTop:栈顶复用模式,如果新的Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,只会调用它的 onNewIntent 方法;如果Activity存在于任务栈中,我们还是会在任务栈重新创建一个Activity 放入栈顶。
3. SingleTask : 栈内复用模式,单实例模式,只要Activity在一个栈中存在,他就不会重新创建新的实例,同时也会调用它的 onNewIntent 方法,而且它默认具有 clearTop的效果,所以会将这个Activity上面的Activity都pop出栈。
eg:
某app的任务栈为Stack1,里面的Activity是ABC(昨天为栈底,右边为栈顶),当Activity D的请求是SingleTask模式,且他请求的栈为Stack2,此时不存在Stack2,所以系统会先创建Stack2再把 Activity D压入栈。所以这个模式,就是先寻找是否有Activity所需要的任务栈,如果没有就创建;然后,再在这个栈中寻找有没有这个Activity,如果有就复用回调onNewIntent方法,并clearTop,这就是这个模式的思想。
4. SingleInstance :单实例模式。这种模式是加强的SingleTask模式,它还具有一个属性,就是这个模式下的Activity只能单独存在于一个新的任务栈,由于栈内复用的特性,后续的请求均不会创建新的Activity,除非这个任务栈被系统销毁。
Activity的生命周期与启动模式大概就写到这里吧。
标签:
原文地址:http://blog.csdn.net/u012883858/article/details/51362500