Intent类的对象是组件间通信的载体,组件间通信就是一个一个的Intent对象在不断传递。Android的三大核心组件Activity,Service和BroadcastReceiver通过Intent对象进行通信。对于这三个组件,Intent的作用方式为:

    Activity组件:Intent主要通过调用Context.startActivity(),Context.startActivityForResult()等方法实现传递,其结果就是启动一个新的Activity或者使当前Activity开始新的任务。

    Service组件:Intent主要通过调用Context.startService()和Context.bindService()方法实现传递。起作用结果是初始化并启动一个服务或绑定一个服务到Context对象。

    BroadcastReceiver组件:Intent主要通过sendBroadcast()等一系列发送广播的的方法实现传递。起作用结果就是将Intent组件以广播的形式发出,以便合适的组件接收。

一个Intent对象就是一组信息,其包含一下内容:

    一:Component Name 部分

        这部分(组件名)指定了未来要处理该Intent对象的组件,封装在一个ComponentName对象中,该对象唯一标识一个应用程序组件。ComponentName类包含两个String成员,分别代表组件的全称类名和包名,包名必须和AndroidManifest.xml文件中标记中的对应信息一致。

        组件名通过setComponent(),setClass()或setClassName()设置,通过getComponent()读取。

        对于Intent,组件名并不是必须的。如果一个Intent对象添加了组件名,则称该Intent为“显示Intent”,这样的Intent在传递的时候会直接根据组件名去寻找目标组件。如果没有添加组件名,则称为“隐式Intent”,Android会根据Intent中的其他信息来确定响应该Intent的组件。

    二:Action 部分

        Action部分是一个字符串对象。描述了Intent会触发的动作。Android系统中已经预定义了一些Action常量,可以参看sdk帮助文档,如ACTION_MAIN,ACTION_CALL等。同时,开发者也可以定义自己的Action描述。一般来讲,定义自己的Action字符串应该以应用程序的包名为前缀(防止重复定义)。由于Action部分很大程度上决定了一个Intent的内容,所以自己定义的Action字符串应该能够一眼看出其意图。

        一个intent对象的动作通过setAction()方法设置,通过getAction()方法读取。

    三:Data 部分

        Data部分描述了Intent的动作所能操作的数据的MIME类型和URL,不同的Action对用不同的操作数据。如:当Action字段是ACTION_EDIT时,Data字段将包含将用于编辑的文档的URL。当为组件进行Intent匹配检查时,正确设置Data的URL资源和数据类型很重要。许多情况下,数据类型能够从URL中推测,特别是content:URL,它表示位于设备上的数据切由内容提供者(Content Provider)提供。

        setData()方法指定数据的URI,setType()指定MIME类型,setDataAndType()指定数据的URI和MIME类型。通过getData()读取URI,getType()读取类型。

    四:Category 部分

        Category为字符串对象,包含了可以处理Intent的组件的类别信息,Intent中可以包含任意个Category。Android同样预定义了一些Category常量,但是和Action不同的是,开发者不能自定义Category。

        调用addCategory()方法添加一个种类到Intent对象中,removeCategory()方法可以删除一个之前添加的种类,getCategories()方法获取Intent对象中的所有种类。

    五:Extras 部分

        Extras部分是一组键值对,包含了需要传递给目标组件并有其处理的一些额外信息。

        Intent有一些列putXXX()方法用于插入各种附加数据,有一些列getXXX()方法可以取出一些列数据。

    六:Flags 部分

        一些有关系统如何启动组件的标志位(如,Activity应该属于哪个任务),和启动后该如何对待它(如,是否属于最近的活动列表),所有标志位都已经在Android系统中预定义了。

更多相关文章

  1. Android(安卓)Widget事件
  2. android 程序退出
  3. 【Android】Service学习之本地服务
  4. Android使用SharedPreferences保存数组
  5. Android(安卓)内功心法(1.9)——java设计模式之装饰模式
  6. Android(安卓)5.0学习之定义阴影
  7. android linux 休眠 深度睡眠 查看 方法 调试
  8. Android开发之Memory类的分析
  9. Android中如何获取IMEI号码

随机推荐

  1. Android多语言切换(兼容安卓9、10)
  2. Android各个版本的新特性
  3. Android的log机制小结
  4. Android锁屏实现与总结
  5. Android(安卓)AsynTask 与Thread 或线程
  6. 【转】android 内存泄漏相关收藏博客。
  7. Android单点触控技术,对图片进行平移,缩放,
  8. 老罗的Android视频教程整理之常用布局
  9. Android---网络交互之登录嘀咕网
  10. 我的实习面经(Android开发,已拿阿里,华为,CVT