一、概念:Activity本身是没有界面的。所以activity类创建了一个窗口,开发人员可以通过setContentView(View)接口把UI放到activity创建的窗口上.Activity继承了ApplicationContext这个类
public
class Activity extends ApplicationContext {
protected
void onCreate(Bundle savedInstanceState);
protected
void onStart();
protected
void onRestart();
protected
void onResume();
protected
void onPause();
protected
void onStop();
protected
void onDestroy();
}
二、生命周期:
1、三种状态:
2、常见的七个方法:
oOnCreate :一个 Activity 的实例被启动时调用的第一个方法。一般情况下,我们都覆盖该方法作为应用程序的一个入口点,在这里做一些初始化数据、设置用户界面等工作。大多数情况下,我们都要在这里从 xml 中加载设计好的用户界面。
onStart():方法在 onCreate() 方法之后被调用,或者在 Activity 从 Stop 状态转换为 Active 状态时被调用。到这一步变成“用户可见”的状态;
onResume:变成和用户可见可交互的,(在Activity栈系统通过栈的方式管理这些Activity,即当前Activity在栈的最上端,运行 完弹出栈,则回到上一个Activity);
onPause:到这一步是可见但不可交互的,系统会停止动画等消耗CPU的事情。
onStop:变得不可见 也不可交互,被下一个activity覆盖了。
onRestart:用户后退回到此Activity,系统会先调用方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态。
onDestroy:这它是被结束时调用的最后一个方法,在这里一般做些释放资源,清理内存等工作onPause,onstop, onDestroy,三种状态下 activity都有可能被系统kill 掉.
onWindowFocusChanged:在Activity窗口获得或失去焦点时被调用,例如创建时首次呈现在用户面前;当前Activity被其他Activity覆盖;当前Activity转到其他Activity或按Home键回到主屏,自身退居后台;用户退出当前Activity。以上几种情况都会调用onWindowFocusChanged,并且当Activity被创建时是在onResume之后被调用,当Activity被覆盖或者退居后台或者当前Activity退出时,它是在onPause之后被调用,如图所示:
onSaveInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,此方法会被调用,无法保证什么时候发生,系统根据资源紧张程度去调度;(2)在用户改变屏幕方向时,此方法会被调用,系统先销毁当前的Activity,然后再重建一个新的,调用此方法时,可以保存一些临时数据;(3)在当前Activity跳转到其他Activity或者按Home键回到主屏,自身退居后台时,此方法会被调.用。 系统调用此方法是为了保存当前口窗各个View组件的状态。onSaveInstanceState的调用顺序是在onPause之前。
onRestoreInstanceState:(1)在Activity被覆盖或退居后台之后,系统资源不足将其杀死,然后用户又回到了此Activity,此方法会被调用;(2)在用户改变屏幕方向时,重建的过程中,此方法会被调用。可以重写此方法,以便可以恢复一些临时数据。onRestoreInstanceState的调用顺序是在onStart之后。
3.常见操作函数执行的顺序
3.1..启动Activity: OnCreate -> onStart->onResume
3.2.跳转到其他Activity,或按下Home键回到主屏:onSaveInstanceState-> onPause-> onStop
3.3.从后台回到前台:onRestart->onStart->onResume
3.4弹出对话框或者锁屏:onSaveInstanceState-> onPause
3.5在对话框的界面返回:onResume
3.6退出: onPause-> onStop->onDestory
3.7屏幕翻转:onSaveInstanceState-> onPause-> onStop->onDestory->OnCreate -> onStart-> onRestoreInstanceState-> onResume(在AndroidManifest.xml中对指定的Activity设置android:screenOrientation="portrait",或者在onCreate方法中指定setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); //竖屏 )
3.8为了避免这样销毁重建的过程,在AndroidMainfest.xml中对OrientationActivity对应的<activity>配置android:configChanges="orientation",然后我们再测试一下,然后做了3次的旋转。onConfigurationChanged->onConfigurationChanged->onConfigurationChanged
4.Activity 启动模式
Activity 栈
Android 是通过一种 Activity 栈的方式来管理 Activity 的,每个应用都有一个任务栈,是用来存放Activity的。除了最顶层即处在 Active 状态的 Activity 外,其它的 Activity 都有可能在系统内存不足时被回收,一个 Activity 的实例越是处在栈的底层,它被系统回收的可能性越大。系统负责管理栈中 Activity 的实例,它根据 Activity 所处的状态来改变其在栈中的位置。
standard
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例,并放入任务栈中。。因此,在这种模式下,可以有多个相同的实例,也允许多个相同Activity叠加。
singleTop
如果Activity在栈顶的时候,启动相同的不Activity,会创建新的实例,而会调用其onNewIntent方法。
两个Activity名为B1,B2。B1为standard,B2为singleTop。
打开的顺序为B1->B2->B2,则实际的顺序为B1->B2。
打开的顺序为B1->B2->B1->B2,则实际的顺序,为B1->B2->B1->B2。
singleTask
只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity
destory掉并调用它的onNewIntent方法。
singleInstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
有三个ActivityD1,D2,D3,三个Activity可互相启动,D2为singleInstance模式。那么程序从D1开始运行,假设D1的taskId为200,那么从D1启动D2时,D2会新启动一个task,即D2与D1不在一个task中运行。假设D2的taskId为201,再从D2启动D3时,D3的taskId为200,也就是说它被压到了D1启动的任务栈中。
注意:
1、finish()先调用onPause、再调用oStop、最后调用oDestroy
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文地址:http://blog.csdn.net/dydlcsdn/article/details/47066475