Activity
Activity的生命周期
Activity的简单生命周期流程为onCreate();→onStart();【注:此时Activity处于不可见状态】→onResume();【注:此时Activity处于运行状态】→onPause();【注:此时Activity处于暂停状态】→onStop();【注:此时Activity处于停滞状态】→onDestroy();【注:调用了此方法后Activity生命周期结束】
其中当Activity正在重新启动的时候,从不可见变为可见的时候,会调用到onRestart();也就是说一个Activity包含七个生命周期流程
-
Activity被其他Activity覆盖其上,系统会调用onPause()方法,暂停当前Activity的执行,若用户取消了覆盖,系统会调用onResume()方法,重新进入到运行状态。
-
Activity跳转到了新的Activity界面或者被后台了或者锁屏时,系统会调用onPause();然后调用onStop();使Activity进入到停滞状态,如果重新回到了该Activity界面(上一个Activity或者从后台变为了前台时或者解开锁屏时),系统会调用onRestart();再调用onStart();最后调用onResume()方法使该Activity进入到运行状态
-
当用户退出Activity时会调用onPause();然后调用onStop();最后调用onDestory();结束Activity生命周期
-
当Activity中弹出dialog对话框的时候,Activity不会调用onPause();只有当Activity启动了dialog风格的Activity时才会调用
-
当Activity是由于异常情况下终止的,系统会调用onSaveInstance来保存当前Activity状态,这个方法调用的时机是在onStop之前的,当Activity重新创建后,系统会调用onRestoreInstanceState,并且把Activity销毁时的onSaveInstanceState方法保存的bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法
Activity的四种启动模式
Activity有四种启动模式 standard,singleTop,singleTask,singleInstance,这四种模式我们可以在清单文件的<Activity节点下通过android:launchMode来进行配置
- standard模式:在这种模式下,activity默认会进入启动它的activity所属的任务栈中。这也是默认的一种模式
- singleTop模式:栈顶复用模式。如果新activity位于任务栈的栈顶的时候,activity不会被重新创建,同时它的onNewIntent方法会被回调。
- singleTask模式:栈内复用模式。只要activity在一个栈中存在,那么多次启动此activity不会被重新创建单例,系统会回调onNewIntent。这种模式可以称为单例模式,只会存在一种,有则直接从栈中调用,没有则创建并且压入栈中
- singleInstance模式:单实例模式。这种模式的activity只能单独地位于一个任务栈中,这种与singleTask有点类似,其实也是有则直接调用,没有则创建并且放入栈中,只不过singleTask是可以和其他的Activity放在同一个栈中,singleInstance则是只会将创建的Activity放在一个栈中,并且这个栈中只会有这一个Activity实例
1. Standard 标准模式
说明: Android创建Activity时的默认模式,假设没有为Activity设置启动模式的话,默觉得标准模式。每次启动一个Activity都会又一次创建一个新的实例入栈,无论这个实例是否存在。
生命周期:如上所看到的,每次被创建的实例Activity 的生命周期符合典型情况,它的onCreate、onStart、onResume都会被调用。
举例:此时Activity 栈中以此有A、B、C三个Activity,此时C处于栈顶,启动模式为Standard 模式。
若在C Activity中加入点击事件,须要跳转到还有一个同类型的C Activity。结果是还有一个C Activity进入栈中,成为栈顶。
2. SingleTop 栈顶复用模式
说明:分两种处理情况:须要创建的Activity已经处于栈顶时,此时会直接复用栈顶的Activity。不会再创建新的Activity;若须要创建的Activity不处于栈顶,此时会又一次创建一个新的Activity入栈,同Standard模式一样。
生命周期:若情况一中栈顶的Activity被直接复用时,它的onCreate、onStart不会被系统调用,由于它并没有发生改变。可是一个新的方法 onNewIntent会被回调(Activity被正常创建时不会回调此方法)。
举例:此时Activity 栈中以此有A、B、C三个Activity,此时C处于栈顶,启动模式为SingleTop 模式。情况一:在C Activity中加入点击事件,须要跳转到还有一个同类型的C Activity。
结果是直接复用栈顶的C Activity。
情况二:在C Activity中加入点击事件,须要跳转到还有一个A Activity。结果是创建一个新的Activity入栈。成为栈顶。
3. SingleTask 栈内复用模式
说明:若须要创建的Activity已经处于栈中时,此时不会创建新的Activity,而是将存在栈中的Activity上面的其他Activity所有销毁,使它成为栈顶。
生命周期:同SingleTop 模式中的情况一同样。仅仅会又一次回调Activity中的 onNewIntent方法
举例:此时Activity 栈中以此有A、B、C三个Activity。此时C处于栈顶,启动模式为SingleTask 模式。
情况一:在C Activity中加入点击事件,须要跳转到还有一个同类型的C Activity。结果是直接用栈顶的C Activity。情况二:在C Activity中加入点击事件,须要跳转到还有一个A Activity。
结果是将A Activity上面的B、C所有销毁,使A Activity成为栈顶。
4. SingleInstance 单实例模式
说明: SingleInstance比較特殊,是全局单例模式,是一种加强的SingleTask模式。它除了具有它所有特性外,还加强了一点:具有此模式的Activity仅仅能单独位于一个任务栈中。
这个经常使用于系统中的应用,比如Launch、锁屏键的应用等等,整个系统中仅仅有一个!所以在我们的应用中一般不会用到。了解就可以。
举例:比方 A Activity是该模式,启动A后。系统会为它创建一个单独的任务栈,由于栈内复用的特性。兴许的请求均不会创建新的Activity,除非这个独特的任务栈被系统销毁。