1.概念区分
显式启动:按名称(完全限定类名)指定要启动的组件,即直接指定要跳转的Activity类名,不用过滤,效率高,适用于同一个应用中的不同Activity跳转。
隐式启动:不会指定特定的组件,而是声明要执行的常规操作,从而允许其他应用中的组件来处理它,即通过IntentFilter可以找到所有之匹配的应用,适用于不同应用之间的Activity跳转。
2.代码实现
2.1显式启动
显式启动方式一
该方式最常用的,通过构造方法传入Component。
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);
显式启动方式二
该方式通过setComponent方法去实现。
Component component = new Component(this,SecondActivity.class);
Intent intent = new Intent();
intent.setComponent(component);
startActivity(intent);
显式启动方式三
该方式通过setClass/setClassName方法去实现。
Intent intent = new Intent();
intent.setclass(this,SecondActivity.class);
//intent.setClass(this.getPackageName,"com.ydscience.SecondActivity");
startActivity(intent);
2.2隐式启动
在AndroidManifest.xml文件中进行声明,对Action进行自定义,自定义的名字可以任意写。
<activity android:name=".SecondActivity">
<intent-filter>
<action android:name="com.ydscience"/>
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
调用方式如下
Intent intent = new Intent();
intent.setAction("com.ydscience");
intent.addCategory("android.intent.category.DEFAULT");
startActivity(intent);
以上的这种隐式启动方式如何遇到可能没有任何应用处理发送到
的隐式 Intent,这种情况下会遇到程序崩溃,如果要验证 Activity 是否会接收 隐式启动的Intent,就要对Intent 对象调用 resolveActivity()。
实现方式如下:
Intent intent = new Intent();
intent.setAction("com.ydscience");
intent.addCategory("android.intent.category.DEFAULT");
if(intent.resolveActivity(getPackageManager())!= null){
startActivity(intent);
}
附Intent七大属性:由以下各个组成部分:
component(组件):目的组件
action(动作):用来表现意图的行动
category(类别):用来表现动作的类别
data(数据):表示与动作要操纵的数据
type(数据类型):对于data范例的描写
extras(扩展信息):扩展信息
Flags(标志位):期望这个意图的运行模式