Android-理解Intent

Intent可以理解是Android不同组件之间的媒介或者是信使,起着通信的作用,这样四大组件之间的耦合就不是特别多,系统可扩展性就比较强比较健壮。

我们可以设想,一个机器人由activity,service,broadcast,contentProvider构成,如果紧密拼凑在一起根本无法“奔跑”,那么现在我们有了Intent,可以理解成机器人的关节,

这样就沟通了四大组件,机器人就能奔跑啦。(包括binder机制,这种c/s结构一定程度上都是为了解耦)

还可以和浏览器的url类比,客户端和服务器之间是通过发送uri来相互通信的,这种松散的网络拓扑就会很健壮,便于共享服务器资源和网络的扩展。

那么常见的Intent的使用是启动Activity,Service,Broadcasst.


组件名称


方法名称


Activity


startActivity()

startActivityForResult()


Service


startService()

bindService()


Broadcasts


sendBroadcast()

sendOrderedBroadcast()

sendStickyBroadcast()

Intent在寻找目标组件的时候有两种方式。一为显示调用,通过Component name来直接指定,如startActivity(intent);二位隐式调用,没有明确指定目标组件的名称,通过一定的条件过滤筛选,如setAction

那么重点来了,Intent对象是由哪些部分构成呢,由一下六个部分构成:Component name,Action,Data,Category,Extras,Flags.Intent可以任选其中的几项来构造,主要是看intent的用途而定。(Intent实质是一系列传输信息类型的集合)

1.Component name

Component name就是组件名称,是要处理这个Intent对象的组件名称。

组件名称对象由ComponentName类来封装,组件名称包含包名称和类名称,被声明在AndroidManifest.xml文件中。

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

需要注意的是Component name是一个可选项,如果被设置,那么Intent对象就显式指定了要转向的组件,如果没有被设置,则Intent对象需要根据其他信息进行筛选查找。

2.Data

数据类型也可以显式指定,比如setData()方法指定数据为URI,setType() 指定为MIME type,setDataAndType() 指定它既为URI又为MIME type。读取的时候URI用getData(),MIME type用getType()。

3.Category

与category相应的方法有添加addCategory()、移除removeCategory() 和获取所有category getCategories() 。

常见的Category常量有:CATEGORY_BROWSABLE ,CATEGORY_GADGET,CATEGORY_HOME,CATEGORY_LAUNCHER,CATEGORY_PROFERENCE.

Category指定的往往是一些控件。

4.Extras

实际上,数据可以被作为一个Bundle对象被使用,利用 putExtras() 和 getExtras() 方法。我们可以看出bundle实质上是hashmap,存储一些键值;然后传递这些键值的信息。

public Bundle() {
mMap = new HashMap<String, Object>();
mClassLoader = getClass().getClassLoader();
}

5.Flags

各种类型的Flag。很多是用来指定Android系统如何启动activity,还有启动了activity后如何对待它。所有这些都定义在Intent类中。

6.Action

Action是指Intent要完成的动作,是一个字符串常量。

Intent类中有很多预定义的常量,为了一些通常的动作;还有一些定义在Android API的其他地方。

也可以自己定义Action常量,自定义的常量需要加上你的应用的包名作为前缀。

Action在很大程度上决定了Intent的其他部分是如何构造的,尤其是 data 和 extras域。(就好像函数名会决定着参数值和返回值一样。)所以Action的名字应该尽可能具体,并且它们应该和Intent中的其他域紧密结合。

使用 setAction() 和 getAction()来设置和读取Action属性。

常见的Action包括:ACTION_CALL,ACTION_EDIT,ACTION_MAIN,ACTION_SYNC,ACTION_BATTERY_LOW,

ACTION_HEADSET_PLUG,ACTION_SCREEN_ON,ACTION_TIMEZONE_CHANGED.

Action指向的往往是android的系统服务相关的,如系统service,broadcast之类的系统服务。

时间: 2024-12-29 23:16:02

Android-理解Intent的相关文章

Android笔记六.深入理解Intent和IntentFilter(二)

深入理解Intent和IntentFiler(二) Jiangdg_VIP http://blog.csdn.net/u012637501 在上一篇文章中,我们比较详细学习了"Intent"的相关知识,现在将学习如何设置Intent对象的这些属性以及如何使用他们来启动组件.Intent对象是一组信息,我们可以通过设置其Action.Data.Category属性来指定启动哪个组件并完成什么样的动作(包含动作所需的数据). "意图"分为显示intent和隐式inten

Android开发教程:理解Intent和Intent Filter

在Android 帮助文档中,Intent的介绍为An intent is an abstract description of an operation to be performed,意思是一个Intent是对一个即将进行的操作的抽象,Intent的字面意识就是“意图”,Android应用程序中的三种其他应用程序基本组件——Activity, Service和Broadcast Receiver,都是使用称为intent的消息来”激活”的.对于向这三种组件发送intent有不同的机制: 使用

Android高手进阶教程(十七)之---Android中Intent传递对象的两种方法(Serializable,Parcelable)!

[转][原文] 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧! 第一步:新建一个andr

Android中Intent对象与Intent Filter过滤匹配过程详解

如果对Intent不是特别了解,可以参见博文<Android中Intent概述及使用>,该文对本文要使用的action.category以及data都进行了详细介绍. 本文内容有点长,希望大家可以耐心读完. 本文在描述组件在manifest中注册的Intent Filter过滤器时,统一用intent-filter表示. 概述 我们知道,Intent是分两种的:显式Intent和隐式Intent.如果一个Intent明确指定了要启动的组件的完整类名,那么这个Intent就是显式Intent,否

深入理解Intent和IntentFiler(一)

http://blog.csdn.net/u012637501/article/details/41080891 为了比较深刻的理解并灵活使用Intent,我计划将这部分的学习分为两步:一是深入理解Intent基本概念以及其类:二是,通过实例来阐述如何灵活使用Intent来启动一个组件以及实现组件之间的传递数据. 一.什么是Intent,有什么作用? Android的应用程序包括四大组件:Activity.contentProvider.Service.BroadcastReceiver,为了方

Android之Intent和Activity

Intent能够说是Android的灵魂,程序跳转和传递数据的时候基本上就是靠Intent了.Intent在Android应用中是相当重要的,理解Intent相应用编程非常有帮助.在Android的官方API文档里边对Intent是这样定义的:An Intent is an abstract description of an operation to be performed.一个Intent就是一次对将要运行的操作的抽象描写叙述(真实够抽象的). 详细有一下3种形式: 1.通过startAc

Android中Intent传递对象的两种方法(Serializable,Parcelable)

今天要给大家讲一下Android中 Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是 Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大 家更容易理解我还是照常写了一个简单的Demo,大家就一步一步跟我来吧! 第一步:新建一个Android工程命名为Object

(六十四)Android中Intent传递对象的两种方法(Serializable,Parcelable)

转载自:http://blog.csdn.net/android_tutor/article/details/5740845 大家好,好久不见,今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable

[转]Android中Intent传递对象的两种方法(Serializable,Parcelable)

http://blog.csdn.net/xyz_lmn/article/details/5908355 今天要给大家讲一下Android中Intent中如何传递对象,就我目前所知道的有两种方法,一种是Bundle.putSerializable(Key,Object);另一种是Bundle.putParcelable(Key, Object);当然这些Object是有一定的条件的,前者是实现了Serializable接口,而后者是实现了Parcelable接口,为了让大家更容易理解我还是照常写

对比 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 如果也能增加个prepareForSegue回调就好了

对比 Android 的 Intent 与 iOS StoryBoard 的 Segue - Intent 如果也能增加个prepareForSegue回调就好了 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用途-保持一致"创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS.Android.Html5.Arduino.pcDuino,否则,出自本博客的文章拒绝转载或再