美文网首页
Intent的显式启动和隐式启动

Intent的显式启动和隐式启动

作者: 一只小菜鸟的进阶之路 | 来源:发表于2017-04-25 21:08 被阅读0次

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(标志位):期望这个意图的运行模式

相关文章

网友评论

      本文标题:Intent的显式启动和隐式启动

      本文链接:https://www.haomeiwen.com/subject/cklmzttx.html