码迷,mamicode.com
首页 > 其他好文 > 详细

Activity生命周期和启动模式

时间:2016-05-12 14:01:11      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

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的生命周期与启动模式大概就写到这里吧。

      


Activity生命周期和启动模式

标签:

原文地址:http://blog.csdn.net/u012883858/article/details/51362500

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!