【Android组件内核面试题】 Intent显示跳转与隐式跳转

2023-09-26  本文已影响0人  小城哇哇

Intent显示跳转与隐式跳转,如何使用?(美团)

这道题想考察什么?
  1. 是否了解Intent跳转的真实场景使用,是否熟悉Intent使用场景?
考察的知识点
  1. Intent跳转处理在项目中使用与基本知识
考生应该如何回答
1.显示意图与隐式意图的区别,说说你的简单理解?

答:

在Activity的跳转中

Activity的跳转需要创建Intent对象,通过设置intent对象的参数指定要跳转Activity
通过设置Activity的包名和类名实现跳转,称为显式意图
通过指定动作实现跳转,称为隐式意图

显式意图
隐式意图
  <intent-filter >
  <action android:name="com.itheima.second"/>
  <data android:scheme="asd" android:mimeType="aa/bb"/>
  <category android:name="android.intent.category.DEFAULT"/>
  </intent-filter>
获取通过setData传递的数据

/ /获取启动此Activity的intent对象
Intent intent = getIntent();
Uri uri = intent.getData();

显式意图和隐式意图的应用场景

2.你在工作中,留意过在Android中Intent显示跳转和隐式跳转,如何使用?

答:

显式 Intent 调用:
    // 创建一个显式的 Intent 对象(方法一:在构造函数中指定)
     Intent intent = new Intent(Intent_Demo1.this, Intent_Demo1_Result1.class);

     Bundle bundle = new Bundle();
     bundle.putString("id", strID);
     intent.putExtras(bundle);

     intent.putExtra("name", "derry");
     intent.putExtra("userInfo", new UserInfo(1, "name"));
     startActivity(intent);

     // 创建一个显式的 Intent 对象(方法二:用 setClass 方法)
     Intent intent = new Intent();
     Bundle bundle = new Bundle();
     bundle.putString("id", strID);
     intent.setClass(Intent_Demo1.this, Intent_Demo1_Result1.class);
     intent.putExtras(bundle);
     startActivity(intent);

     // 创建一个显式的 Intent 对象(方法三:用 setClass 方法)
     Intent intent = new Intent();
     Bundle bundle = new Bundle();
     bundle.putString("id", strID);
     intent.setClassName(Intent_Demo1.this, "com.great.activity_intent.Intent_Demo1_Result1");
     intent.putExtras(bundle);
     startActivity(intent);

     //创建一个显式的 Intent 对象(方法四:用 setComponent 方法)
     Intent intent = new Intent();
     Bundle bundle = new Bundle();
     bundle.putString("id", strID);
     //setComponent方法的参数:ComponentName
     intent.setComponent(new ComponentName(Intent_Demo1.this,
                                           Intent_Demo1_Result1.class));
     intent.putExtras(bundle);
     startActivity(intent);
Intent隐式跳转 Action:
    // 创建一个隐式的 Intent 对象:Action 动作
    /**
     * 这里指定的是 AndroidManifest.xml 文件中配置的
     * <intent-filter>标签中的<action android:name="com.great.activity_intent
     .Intent_Demo1_Result3" />
     * 所在的 Activity,注意这里都要设置 <category  android:name="android.intent.
     category.DEFAULT" />
     */

    Intent intent = new Intent();
    // 设置 Intent 的动作
    intent.setAction("com.great.activity_intent.Intent_Demo1_Result3");
    Bundle bundle = new Bundle();
    bundle.putString("id", strID);
    intent.putExtras(bundle);
    startActivity(intent);
AndroidManifest.xml:
        <activity android:name="Intent_Demo1_Result3"
                  android:label="Intent_Demo1_Result3">
            <intent-filter>
                <action android:name="com.great.activity_intent.Intent_Demo1_Result3" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
Category 类别:
// 创建一个隐式的 Intent 对象:Category 类别
Intent intent = new Intent();
intent.setAction("com.great.activity_intent.Intent_Demo1_Result33");
/**
 * 不指定 Category 或 只指定 AndroidManifest.xml 文件中 <intent-filter> 
 * 标签中配置的任意一个 Category
 * <category android:name="android.intent.category.DEFAULT" /> 除外,就可以访问该 Activity,
 */
intent.addCategory(Intent.CATEGORY_INFO);
intent.addCategory(Intent.CATEGORY_DEFAULT);
Bundle bundle = new Bundle();
bundle.putString("id", strID);
intent.putExtras(bundle);
startActivity(intent);
AndroidManifest.xml:
        <activity android:name="Intent_Demo1_Result2"
                  android:label="Intent_Demo1_Result2">
            <intent-filter>
                
                <category android:name="android.intent.category.INFO" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
                
            </intent-filter>
        </activity>
Date 数据 跳转:
// 创建一个隐式的 Intent 对象,方法四:Date 数据
Intent intent = new Intent();
Uri uri = Uri.parse("http://www.great.org:8080/folder/subfolder/etc/abc.pdf");

// 注:setData、setDataAndType、setType 这三种方法只能单独使用,不可共用
// 要么单独以 setData 方法设置 URI
// intent.setData(uri);
// 要么单独以 setDataAndType 方法设置 URI 及 mime type
intent.setDataAndType(uri, "text/plain");
// 要么单独以 setDataAndType 方法设置 Type
//intent.setType("text/plain");

/**
 * 不指定 Category 或 只指定 AndroidManifest.xml 文件中 <intent-filter> 标签中配置的任意一个 Category
 * <category android:name="android.intent.category.DEFAULT" /> 除外,就可以访问该 Activity
 */
Bundle bundle = new Bundle();
bundle.putString("id", strID);
intent.putExtras(bundle);
startActivity(intent);
AndroidManifest.xml:
        <activity android:name="Intent_Demo1_Result2"
                  android:label="Intent_Demo1_Result2">
            <intent-filter>
                <category android:name="android.intent.category.DEFAULT" />
                <data
                    android:scheme="http"
                    android:host="www.great.org"
                    android:port="8080"
                    android:pathPattern=".*pdf"
                    android:mimeType="text/plain"/>
            </intent-filter>
        </activity>

最后

有需要面试题的朋友可以关注一下哇哇,以上都可以分享!!!

上一篇 下一篇

猜你喜欢

热点阅读