zoukankan      html  css  js  c++  java
  • 什么是Intent? 转

    一、Intent 作用
        Intent 是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由Intent来协助完成Android各个组件之间的通讯。比如说调用 startActivity()来启动一个activity,或者由broadcaseIntent()来传递给所有感兴趣的 BroadcaseReceiver, 再或者由startService()/bindservice()来启动一个后台的service.所以可以看出来,intent主要是用来启动其他的 activity 或者service,所以可以将intent理解成activity之间的粘合剂。
        要在不同的activity之间传递数据,就要在intent中包含相应的东西,一般来说数据中最基本的应该包括:action、data/type、 category和extras,它们一起形成了一种语言,这种语言可以表达出诸如“给张三打电话”之类的短语组合。
        对于明确指出了目标组件名称的Intent,我们称之为“显式Intent”。对于没有明确指出目标组件名称的Intent,则称之为“隐式 Intent”。Android系统使用IntentFilter 来寻找与隐式Intent相关的对象。显式Intent直接用组件的名称定义目标组件,这种方式很直接。但是由于开发人员往往并不清楚别的应用程序的组件 名称,因此,显式Intent更 多用于在应用程序内部传递消息。比如在某应用程序内,一个Activity启动一个Service。隐式Intent恰恰相反,它不会用组件名称定义需要 激活的目标组件,它更广泛地用于在不同应用程序之间传递消息。

    二、Intent的构造函数
    公共构造函数:
    1、Intent() 空构造函数
    2、Intent(Intent o) 拷贝构造函数
    3、Intent(String action) 指定action类型的构造函数
    4、Intent(String action, Uri uri) 指定Action类型和Uri的构造函数,URI主要是结合程序之间的数据共享ContentProvider
    5、Intent(Context packageContext, Class<?> cls) 传入组件的构造函数,也就是上文提到的
    6、Intent(String action, Uri uri, Context packageContext, Class<?> cls) 前两种结合体
    Intent有六种构造函数,3、4、5是最常用的,并不是其他没用!
    Intent(String action, Uri uri)  的action就是对应在AndroidMainfest.xml中的action节点的name属性值。在Intent类中定义了很多的Action和Category常量。
    示例代码:
       1: Intent intent = new Intent(Intent.ACTION_EDIT, null);
       2: startActivity(intent);
    示 例代码是用了第四种构造函数,只是uri参数为null。执行此代码的时候,系统就会在程序主配置文件AndroidMainfest.xml中寻 找<action android:name="android.intent.action.EDIT" />对应的Activity,如果对应为多个activity具有<action android:name="android.intent.action.EDIT" />此时就会弹出一个dailog选择Activity。

    三、实例

    什么是Intent? - 18989792 - 刘盛瀚

    HelloWorldActivity.java 中的通过startActivity(intent)告诉Android启动新的Activity,但在AndroidManifest.xml(代码如 下)中的intent-filter却匹配不到intent,但并没有报错,因为HelloWorldActivity.java是Activity类的 子类,intent可以和Activity的intent-filter匹配,则直接调用Activity自身了。

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="john.android.test.hello"
        android:versionCode="1"
        android:versionName="1.0" >

        <uses-sdk android:minSdkVersion="7" />

        <application
            android:icon="@drawable/ic_launcher"
            android:label="@string/app_name" >
            <activity
                android:label="常联系"
                android:name=".HelloWorldActivity" >
                <intent-filter >
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
        </application>

    </manifest>

  • 相关阅读:
    python type and __mateclass__和__new__的使用
    python讲解类的特殊成员方法
    python 静态方法、类方法、属性方法详解
    python 多态
    nginx的常用设置
    初识vue
    设置跨域访问
    1分钟安装wordpress
    wechat,wechat-api,mongoose,winston等的使用
    winston自定义日志管理
  • 原文地址:https://www.cnblogs.com/carbs/p/2571328.html
Copyright © 2011-2022 走看看