1.概述和Component属性
直接查找组件来跳转界面:创建一个ComponentName对象的实例,再把实例作为参数传入intent的setComponent()方法里,它的实现与常用的Intent intent = new Intent(this,SecondActivity.class)其实是一样的
2.Action属性
Activity中Intent Filter的匹配过程
(纠正:余下的Intent Filter数量是否不为0)
调用intent的setAction方法添加自定义的Action(字符串形式),然后在清单文件中的相应Activity添加<intent filter><action android:name="~~~"></intent filter>,还应在Activity中加入category标签,其他组件在清单文件中不用加category
如果有两个Activity都含有符合要求的action,那么会弹出供用户选择的界面
在intent filter中还可以设置优先级android:priority="",除非有一个设置为负数,否则均为正数,设置无效;
在代码中setAction只能执行一次,但对应的activity在清单文件中却可以有多个action属性,而且只需满足一个action就可跳转到该界面;
3.Category与Data属性
addCategory()可以添加多个类别
data(Uri)属性,一般配合action一起使用(最常用的组合方式)
注意:在new Intent()是没有参数的。
MainActivity
public void sendDataClick(View v){ Intent intent = new Intent();//哎,我又踩坑了!傻到在这里传入Activity2.class, // 结果action和data不就白设置了?我死去的时间啊!!! intent.setAction(Intent.ACTION_VIEW); Uri data = Uri.parse("http://www.baidu.com"); intent.setData(data); startActivity(intent); }
<activity android:name=".Activity2" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.VIEW"></action> <category android:name="android.intent.category.DEFAULT"></category> <data android:scheme="http" android:host="www.baidu.com"></data> </intent-filter> </activity>
4.Type属性
type属性:用来表示数据类型,要同时设置data和type属性,要用setDataAndType()方法
5.Standard、SingleTop、SingleTask、SingleInstance启动模式
Activity的四种启动模式:
在启动文件对应的activity中添加android:launchMode="~~~"
standard:默认的模式,每次启动会新建一个Activity对象,在栈中“后进先出,先进后出”
singleTop:在当前任务栈中判断栈顶是否为当前Activity,如果是就直接使用,如果不是,再创建一个放在栈顶;
singleTask:在当前任务栈中判断栈里是否存在Activity,如果不存在就创建一个新的Activity入栈,如果存在,会把之上的所有Activity清除出栈,显示所需的Activity;
singleInstance:新创建一个任务栈放入新创建的Activity,该任务栈只允许存在一个Activity实例(同类的Activity会多次创建),如果已存在,会切换到该任务栈
6.Flags属性与小结
在代码中设置Activity的启动模式,可以调用intent的setFlags()方法
INTENT.FLAG_ACTIVITY_NEW_TASK:在新的任务栈中启动Activity(用得较多)
7.Intent应用示例