一、Activity的生命周期:
1.Activity分为四个状态: a、Active/Running:该状态下活动可见并能够与用户进行交互,处于Activity栈的栈顶;
b、Paused:当活动被非全屏Activity或者透明Activity占据栈顶的时候,该活动就进入这个状态。可见,但不能与用户进行交互;
c、Stopped:当活动被另一个活动完全覆盖时进入这个状态。不可见,但仍然保持了状态信息和成员变量。
d、Killed:当活动被系统回收掉或者没被创建过,则处于这个状态。
2.Activity通过7个回调方法来展示了其生命周期:onCreate、onStart、onResume、onPause、onStop、onDestroy、onRestart。
关于onStart、onResume与onPause、onStop这两对回调,我的理解是:onResume与onPause是从能否与用户进行交互的角度来说的,onStart和onStop是从是否可见的角度来说的。比如:当前活动启动一个非全屏的活动(或透明的活动),这时候只会调用onPause方法,而onStop方法是不会调用的。
生命周期: a、当活动被第一次创建的时候:onCreate -> onStart -> onResume
b、当启动了一个活动,并被全完覆盖:onPause -> onStop
c、当再次回到原活动时:onRestart -> onStart -> onResume
d、当按返回键回退时:onPause -> onStop -> onDestroy
e、横竖屏切换的时候,如果没有在该活动的属性中指定: android:configChanges="orientation",那么方法的调用为:onPause -> onSaveInstanceState ->onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume
二、Activity的启动模式:Activity有四种启动模式,可以通过Manifest文件中的android:launchMode设置或者通过Intent的flag属性来设置。(关于任务和返回栈栈:http://blog.csdn.net/guolin_blog/article/details/41087993)
1、Standard即标准模式,新创建的活动在当前任务栈的栈顶,并且每次启动都会创建新的实例。
2、singleTop模式(栈顶复用):如果活动指定singleTop,那么启动的时候,系统会判断栈顶是不是该活动,如果是,就直接引用该活动而不会去创建新的实例(调用该活动的onNewIntent方法);如果不是,才会创建新的实例。比如:当前返回栈中有A、B、C,如果C的启动模式是singleTop,再次启动C,系统不会去创建C的新的实例,而是去调用C的onNewIntent方法,返回栈中依然是A、B、C。
3、singleTask模式(栈内复用):如果活动指定为此模式,那么启动的时候,系统会判断当前任务栈中是否存在该活动,如果存在,则将其上面的活动全部出栈,令其处于栈顶;如果不存在,则创建该活动的实例。这是 活动都同属于一个APP的情况。如果启动另外一个APP中的singleTask模式的活动,则会创建一个新的任务栈。如果singleTask模式的活动已经处于一个后台任务栈中,则启动它会将它所属于的整个后台任务栈切换到前台。
4、singleInstance模式:申明为此模式的活动只会出现在一个新的任务栈中,并且该任务栈中只存在这一个活动。
5、Intent.FLAG_ACTIVITY_NEW_TASK:使用新的任务栈来启动一个活动,通常用于在服务中启动活动
6、Intent.FLAG_ACTIVITY_SINGLE_TOP:与singleTop效果相同
7、Intent.FLAG_ACTIVITY_CLEAR_TOP:与singleTask效果相同
8、Intent.FLAG_ACTIVITY_NO_HISTORY:使用此标志的活动,当其启动了其他的活动后就消失了,不在返回栈中。
三、IntentFilter的匹配
IntentFilter用于隐式调用一个活动,需要匹配其设置的action,category,data。
1、action:IntentFilter中可以有多个action,Intent中必须有一个action和IntentFilter中的相同。如果Intent中没有action,则匹配失败
2、category:如果Intent中有category,则必须和IntentFilter中的任何一个相同,否则匹配失败。如果没有category,则系统在调用startActivity或startActivityForResult时候回默认加上android.intent.category.DEFAULT这个category。
3、data:和action的匹配规则相同。如果IntentFilter中定义了data,那么Intent中也必须指定data。data由两部分组成:mimeType和URI。
(以上总结来源于Android群英传和Android开发艺术探索两本书)