一、Activity的四种活动状态:
1、运行状态
2、暂停状态
3、停止状态
4、销毁状态
二、Activity的生命周期:
1、生命周期的方法
onCreate() >>onStart() >> onResume() >> onPause() >> onStop() >> onDestroy() ;
注:还有一个onRestart()方法在Activity重新回到前台时(从不可见变成可见)会调用

1.1 Activity各个方法的调用时机
eg: activityA和activityB
正常启动一个activityA时候:onCreate() >> onStart() >> onResume()
activityA中启动activityB的时候:先会调用activityA中的onPause() >>activityB的onCreate() >> activityB的onStart() >> activityB的onResume() >>activityA中的onStop()
从activityB退回到activityA的时候:先会调用activityB中的onPause() >> activityA的OnRestart() >> activityA的onStart() >> activityA的onResume() >> activityB的onStop() >> activityB的onDestroy()
当activityA显示在台前的时候按下Home键,然后再点击程序回到台前 : onPause() >> onStop() >>onRestart() >> onStart() >> onResume()
2、正常情况下的生命周期
如图(1)
3、异常情况下的生命周期
在程序的运行中,activity可能会遇到异常情况,一般有两种
3.1 资源相关的系统配置发生改变导致Activity被杀死然后重新创建(横 竖屏)

当系统配置发生变化时,Activity会被销毁,onPause() >> onStop() >>onDestroy()都会被调用,这时候系统会调用onSaveInstanceState(Bundle bundle)方法来保存被销毁的Activity的一些状态,然后在Activity重新创建之后系统会调用onRestroeInstanceState(Bundle bundle),利用传递过来的Bundle对象来恢复状态
注意:只有在Activity被异常销毁的时候,系统才会调用 onSaveInstanceState()和onRestoreInstanceState() 方法,如果在onCreate中获取Bundle对象需要判断对象是否为空,onRestoreInstanceState()中的Bundle对象一定不为空
3.2 系统资源内存不足导致优先级低的Activity被销毁
在Android开发中 优先级:
前台Activity(可跟用户交互) >> 可见但是不能交互的Activity >> 后台Activity
优先级越低越容易被杀死
如果不想Activity重新被创建,可以给Activity指定configChanges属性
最常用的有四种:locale 、orientation、srceenSize 、keyboardHidden;
三、Activity的启动模式
Android中负责管理Activity的栈叫做任务栈,也可以叫做返回栈,Activity都会被栈管理,后进先出
Activity有四种启动模式
1、standard(默认启动模式)
这是Activity的默认启动模式,每次启动一个Activity都会重新创建一个此Activity的实例,不管任务栈中是否已经存在它的实例
2、singleTop(栈顶复用模式)
当一个Activity被启动的时候,判断栈中是否有此Activity的实例,如果有实例则判断是否在任务栈的栈顶,如果在栈顶则不会重新创建它的实例,系统会调用onNewIntent()方法,如果不在栈顶则会创建它的实例,如果任务栈中没有此Activity的实例正常创建它的实例。
3、singleTask(栈内复用模式)
当一个Activity被启动的时候,系统会先判断是否有它想要的任务栈,如果不存在就重新创建一个任务栈,然后把创建它的实例并放入栈中,如果有任务栈了,判断栈中是否有此Activity的实例,如果有实例则把此实例调到栈顶,系统会调用onNewIntent()方法,并把此实例上面别的Activity实例全部移出任务栈(适用于登录界面),如果没有实例则创建实例并放入栈中
4、singleInstance(单实例模式)
是singleTask的加强版,具有singleTask的一切特征,此启动模式的Activity只能单独的存在于一个任务栈中,当一个此启动方式的Activity被启动的时候,系统会新建一个任务栈并把它的实例放进去,因为是栈内复用模式,所以后面都不会再创建它的实例。
网友评论