Intent分为直接Intent和间接Intent
/***
* 直接查找法(通过组件名称)
* @param v
*/
public void componentClick(View v){
// Intent intent = new Intent();
// ComponentName componentName = new ComponentName(this,MainActivity2.class);
// intent.setComponent();
Intent intent = new Intent(this,MainActivity2.class);
startActivity(intent);
}
**
Intent属性
**
1.component(组件):目的组件
2.Action(动作):用来表现意图的行动
是一个用户定义的字符串,用于描述一个Android应用程序组件,一个Intent Filter可以保护多个Action。
在AndroidManifest.xml的Activity定义时可以在其intent-filter>节点制定一个Action列表用于标识Activity所能接受的动作。
当前组件是Activity必须有默认Category
/***
* 使用间接法(通过action属性)
* @param v
*/
public void actionClick(View v){
Intent intent = new Intent();
intent.setAction("com.example.intentapplication.MY_ACTION");
startActivity(intent);
}
<activity android:name=".MainActivity2">
<intent-filter>
<action android:name="com.example.intentapplication.MY_ACTION"></action>
<category android:name="android.intent.category.DEFAULT"></category>
</intent-filter>
</activity>
3.category(类别):用来表现动作的类别
category属性也是作为intent-filter>子元素来声明的
4.data(数据):表示与动作要操纵的数据
/***
* 一般与action配合使用
* @param v
*/
public void dataClick(View v){
Intent intent = new Intent();
intent.setAction("com.example.action.MY_ACTION");
Uri data = Uri.parse("http://www.baidu.com");
intent.setData(data);
startActivity(intent);
}
<activity android:name=".MainActivity4">
<intent-filter>
<action android:name="com.example.action.MY_ACTION"></action>
<category android:name="android.intent.category.DEFAULT"></category>
<data android:scheme="http" android:host="www.baidu.com"></data>
</intent-filter>
</activity>
使用</action android:name=“android.intent.action.VIEW”><//action></category android:name=“android.intent.category.BROWSABLE”><//category>和intent.setAction(Intent.ACTION_VIEW); 可以打开浏览器
5.type(数据类型):对于data范例的描写
如果Intent对象中既包含Uri又包含Type,那么intent-filter中也必须二者都包含
6.extras(扩展信息):扩展信息
7.Flags(标志位):期望这个意图的运行模式
FLAG_ACTIVITY_NEW_TASK在新的任务栈中启动Activity,如果有,就在本人无中启动
FLAG_ACTIVITY_CLEAR_TASK 相当于singleTask
FLAG_ACTIVITY_CLEAR_TOP 相当于singleTop
public void flagClick(View v){
Intent intent = new Intent(this,MainActivity5.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
**
四种启动模式
**
standard模式
默认的模式,每次加载必定会构造一个新的Activity实例放到模板task的activity栈顶。
singleTop模式
在当前任务栈中,判断栈顶是否为当前Activity,是,就直接使用,不是就创建新的放入栈中
singleTask模式
判断栈中是否存在需要的Activity,如果不存在,创建一个新的Activity入栈,如果存在,会把该Activity之上的所有Activity清除出栈,显示当前Activity
singleInstance模式
新创建一个任务栈,放入新创建的Activity,该任务栈只允许存在一个Activity类,如果已存在,会切换到该任务栈