美文网首页
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