显式Intent:

  • 显式意图明确指定了要激活的组件是哪个组件,一般是在应用程序内部使用。
    如:Intent.setComponent()、Intent.setClassName()或Intent.setClass()方法或者在new Intent(A.this,B.class)指明需要转向到的Activity,
  • 效率高,但耦合度也高

隐式Intent:

  • 通过在清单文件中配置IntentFilter来实现的,它一般没有明确指出目标组件名称
  • 用于在不同应用程序之间
  • 降低程序的耦合度,但效率更低。
  • 如果不希望当前隐式intent被跨应用启动,只需要在AndroidManifest.xml对应的activity中配置android:exported="false"即可。

 

 

intent就是意图的意思。Intent分两种:显式(Explicit intent)和隐式(Implicit intent)。

一、显式(设置Component)

显式,即直接指定需要打开的activity对应的类。
以下多种方式都是一样的,实际上都是设置Component直接指定Activity类的显式Intent,由MainActivity跳转到SecondActivity:
1、构造方法传入Component,最常用的方式
Intent intent = new Intent(this, SecondActivity.class);
startActivity(intent);

2、setComponent方法
ComponentName componentName = new ComponentName(this, SecondActivity.class);
// 或者ComponentName componentName = new ComponentName(this, "com.example.app016.SecondActivity");
// 或者ComponentName componentName = new ComponentName(this.getPackageName(), "com.example.app016.SecondActivity");
 
Intent intent = new Intent();
intent.setComponent(componentName);
startActivity(intent);

3、setClass/setClassName方法
Intent intent = new Intent(); 
intent.setClass(this, SecondActivity.class);
// 或者intent.setClassName(this, "com.example.app016.SecondActivity");
// 或者intent.setClassName(this.getPackageName(), "com.example.app016.SecondActivity");
        
startActivity(intent);

显式Intent通过Component可以直接设置需要调用的Activity类,可以唯一确定一个Activity,意图特别明确,所以是显式的。设置这个类的方式可以是Class对象(如SecondActivity.class),也可以是包名加类名的字符串(如"com.example.app016.SecondActivity")。这个很好理解,在应用程序内部跳转界面常用这种方式。


二、隐式

隐式,即不是像显式的那样直接指定需要调用的Activity,隐式不明确指定启动哪个Activity,而是设置Action、Data、Category,让系统来筛选出合适的Activity。筛选是根据所有的来筛选

下面以Action为例:AndroidManifest.xml文件中,首先被调用的Activity要有一个带有并且包含的Activity,设定它能处理的Intent,并且category设为"android.intent.category.DEFAULT"。action的name是一个字符串,可以自定义,例如我在这里设成"abcdefg":

                    android:name="com.example.app016.SecondActivity">
           
               
               
           

       

然后,在MainActivity,才可以通过这个action name找到上面的Activity。下面两种方式分别通过setAction和构造方法方法设置Action,两种方式效果相同。
1、setAction方法
Intent intent = new Intent();
intent.setAction("abcdefg");
startActivity(intent);

2、构造方法直接设置Action
Intent intent = new Intent("abcdefg");
startActivity(intent);

通过设置Action字符串,表明自己的意图,即我想干嘛,需要由系统解析,找到能够处理这个Intent的Activity并启动。比如我想打电话,则可以设置Action为"android.intent.action.DIAL"字符串,表示打电话的意图,系统会找到能处理这个意图的Activity,例如调出拨号面板。


有几点需要注意:

1、这个Activity其他应用程序也可以调用,只要使用这个Action字符串。这样应用程序之间交互就很容易了,因为如此,为了防止应用程序之间互相影响,一般命名方式是包名+Action名,例如这里命名"abcdefg"就很不合理了,就应该改成"com.example.app016.MyTest"。

2、可以在自己的程序中调用其他程序的Action。例如可以在自己的应用程序中调用拨号面板:

Intent intent = new Intent(Intent.ACTION_DIAL);
// 或者Intent intent = new Intent("android.intent.action.DIAL");
// Intent.ACTION_DIAL是内置常量,值为"android.intent.action.DIAL"
startActivity(intent);


3、一个Activity可以处理多种Action
只要你的应用程序够牛逼,一个Activity可以看网页,打电话,发短信,发邮件。。。当然可以。
Intent的Action只要是其中之一,就可以打开这个Activity。

                    android:name="com.example.app016.SecondActivity">
           
               
               
               
               
               
           

       

 

示例参考:https://blog.csdn.net/xiao__gui/article/details/11392987 

更多相关文章

  1. android自动加载模块.ko文件的小方法
  2. android 两指缩放图片 event.getActionMasked() 方法的使用
  3. Android的图形API调用(一)
  4. TabLayout属性详解
  5. Android中view绘制常用知识
  6. Android(安卓)使用MotionLayout实现动画效果
  7. Android实现一个通用的PopupWindow
  8. Android(安卓)Provider用法
  9. 在Android应用中定制菜单

随机推荐

  1. android 3G pppd 调试记录。
  2. Android(安卓)滚动Tab
  3. Android(安卓)Studio 指定DEBUG和RELEASE
  4. Android(安卓)限定 Activity 转向
  5. Android(安卓)横屏不重启 Activity
  6. Android去掉顶部的阴影
  7. 使用navigator.userAgent.toLowerCase()
  8. Android基础系列-----------Android进程/
  9. Android控件之CheckBox(复选框控件)
  10. Touch in Android