一、Activity生命周期
onCreate()
表示Activity开始创建。一般在里面做一些数据初始化的操作;
onStart()
表示Activity正在启动,即将进入前台。这个时候Activity已经创建出来了,但是还没有进入前台,无法与用户交互;
onRestart()
表示Activity正在重新启动。从不可见状态(onStop状态)重新回到可见状态时,会调用回调这个方法;
onResume()
表示Activity已经进入前台,能够与用户进行交互;
onPause()
表示Activity即将停止。从完全可见状态变为部分可见状态时会回调这个方法;
onStop()
表示Activity正在停止。从部分可见状态变为不可见状态(从前台到后台)时,会回调这个方法;
onDestroy()
表示Activity正在销毁。这是Activity生命周期的最后一个方法,一般在这个方法里做一些资源回收的工作;
二、Activity启动模式
standard
默认模式,可以不用写配置。在这个模式下,都会默认创建一个新的实例。
singleTop
可以有多个实例,但是不允许多个相同Activity叠加。即,如果Activity在栈顶的时候,启动相同的Activity,不会创建新的实例,而会调用其onNewIntent方法。
singleTask
只有一个实例。在同一个应用程序中启动他的时候,若Activity不存在,则会在当前task创建一个新的实例,若存在,则会把task中在其之上的其它Activity destory掉并调用它的onNewIntent方法。
singleInstance
只有一个实例,并且这个实例独立运行在一个task中,这个task只有这个实例,不允许有别的Activity存在。
三、IntentFilter的匹配规则
//Intent显示调用
Intent intent = new Intent();
intent.setClass(SecondActivity.this,ThirdActivity.class);
startActivity(intent);
//隐式调用
Intent过滤信息中有action, category, data
匹配规则
a、只有一个Intent同时匹配action类别, category类别, data类别才算完全匹配.只有完全匹配才能启动目标Activity.
b、一个Activity可以配置多组IntentFilter.一个Intent只要能匹配其中一组IntentFilter,即可成功启动对应的Activity.
//action的匹配规则:
<activity android:name=".FirstActionActivity">
<intent-filter>
<action android:name="com.huyc.action1"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
<intent-filter>
<action android:name="com.huyc.action2"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
//调用
Intent intent = new Intent();
intent.setAction("com.huyc.action1");
// intent.setAction("com.huyc.action2"); 或者这样
startActivity(intent)
//category的匹配规则:
<activity android:name=".FirstActionActivity">
<intent-filter>
<action android:name="com.huyc.action1"></action>
<category android:name="com.huyc.category1"></category>
<category android:name="com.huyc.category2"></category>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
<intent-filter>
<action android:name="com.huyc.action2"></action>
<category android:name="com.huyc.category3"></category>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
//调用
//匹配第一组过滤规则:
Intent intent = new Intent();
intent.setAction("com.huyc.action1");
intent.addCategory("com.huyc.category1");
intent.addCategory("com.huyc.category2");
startActivity(intent);
//或者
Intent intent = new Intent();
intent.setAction("com.huyc.action1");
intent.addCategory("com.huyc.category1");
//intent.addCategory("com.huyc.category2");
startActivity(intent);
//或者
Intent intent = new Intent();
intent.setAction("com.huyc.action1");
//intent.addCategory("com.huyc.category1");
intent.addCategory("com.huyc.category2");
startActivity(intent);
//匹配第二组过滤规则:
Intent intent = new Intent();
intent.setAction("com.huyc.action2");
intent.addCategory("com.huyc.category3");
startActivity(intent);
//不匹配category 因为系统在调用startActivity()或startActivityForResult时会默认为intent加上"android.intent.category.DEFAULT"这个category
Intent intent = new Intent();
intent.setAction("com.huyc.action2");
startActivity(intent);
//data的匹配规则:<scheme>: //<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]
<data android:scheme="string"
android:host="string"
android:port="string"
android:path="string"
android:pathPrefix="string"
android:pathPattern="string"
android:mimeType="string"></data>
//intent-filter 过滤规则虽然没有明确指定URI,但却有默认值,默认值为content和file
<intent-filter>
<action android:name="com.huyc.action2"></action>
<action android:name="com.huyc.action3"></action>
<category android:name="com.huyc.category3"></category>
<category android:name="android.intent.category.DEFAULT"></category>
<data android:mimeType="text/plain"></data>
</intent-filter>
//调用
Intent intent = new Intent();
intent.setAction("com.huyc.action2");
intent.addCategory("com.huyc.category3");
intent.setDataAndType(Uri.parse("file://string"), "text/plain");
startActivity(intent);