安卓核心技术中级——Intent

Intent分为直接Intent和间接Intent

/***
     * 直接查找法(通过组件名称)
     * @param v
     */
    public void componentClick(View v){
//        Intent intent = new Intent();
//        ComponentName componentName = new ComponentName(this,MainActivity2.class);
//        intent.setComponent();
        Intent intent = new Intent(this,MainActivity2.class);

        startActivity(intent);
    }

**

Intent属性

**
1.component(组件):目的组件
2.Action(动作):用来表现意图的行动

是一个用户定义的字符串,用于描述一个Android应用程序组件,一个Intent Filter可以保护多个Action。
在AndroidManifest.xml的Activity定义时可以在其intent-filter>节点制定一个Action列表用于标识Activity所能接受的动作。
当前组件是Activity必须有默认Category

/***
     * 使用间接法(通过action属性)
     * @param v
     */
    public void actionClick(View v){
        Intent intent = new Intent();
        intent.setAction("com.example.intentapplication.MY_ACTION");
        startActivity(intent);
    }

<activity android:name=".MainActivity2">
            <intent-filter>
                <action android:name="com.example.intentapplication.MY_ACTION"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>

3.category(类别):用来表现动作的类别

category属性也是作为intent-filter>子元素来声明的

4.data(数据):表示与动作要操纵的数据

/***
     * 一般与action配合使用
     * @param v
     */
    public void dataClick(View v){
        Intent intent = new Intent();
        intent.setAction("com.example.action.MY_ACTION");
        Uri data = Uri.parse("http://www.baidu.com");
        intent.setData(data);
        startActivity(intent);
    }

<activity android:name=".MainActivity4">
            <intent-filter>
                <action android:name="com.example.action.MY_ACTION"></action>
                <category android:name="android.intent.category.DEFAULT"></category>
                <data android:scheme="http" android:host="www.baidu.com"></data>
            </intent-filter>
        </activity>

使用</action android:name=“android.intent.action.VIEW”><//action></category android:name=“android.intent.category.BROWSABLE”><//category>和intent.setAction(Intent.ACTION_VIEW); 可以打开浏览器

5.type(数据类型):对于data范例的描写

如果Intent对象中既包含Uri又包含Type,那么intent-filter中也必须二者都包含

6.extras(扩展信息):扩展信息
7.Flags(标志位):期望这个意图的运行模式

FLAG_ACTIVITY_NEW_TASK在新的任务栈中启动Activity,如果有,就在本人无中启动
FLAG_ACTIVITY_CLEAR_TASK 相当于singleTask
FLAG_ACTIVITY_CLEAR_TOP 相当于singleTop

public void flagClick(View v){
        Intent intent = new Intent(this,MainActivity5.class);
        intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
        startActivity(intent);
    }

**

四种启动模式

**
standard模式

默认的模式,每次加载必定会构造一个新的Activity实例放到模板task的activity栈顶。

singleTop模式

在当前任务栈中,判断栈顶是否为当前Activity,是,就直接使用,不是就创建新的放入栈中

singleTask模式

判断栈中是否存在需要的Activity,如果不存在,创建一个新的Activity入栈,如果存在,会把该Activity之上的所有Activity清除出栈,显示当前Activity

singleInstance模式

新创建一个任务栈,放入新创建的Activity,该任务栈只允许存在一个Activity类,如果已存在,会切换到该任务栈

猜你喜欢

转载自blog.csdn.net/asjklm/article/details/88965593