什么是Intent ? Intent是一种运行时绑定(runtime binding)机制,它能在程序运行的过程中连接两个不同的组件。通过Intent,你的程序可以向Android表达某种请求或者意愿,Android会根据意愿的内容选择适当的组件来响应。比如,有一个Activity希望打开网页浏览器查看某一网页的内容,那么这个Activity只需要发出WEB_SEARCH_ACTION请求给Android,Android 会根据Intent的内容,查询各组件注册时的声明的IntentFilter,找到网页浏览器Activity来浏览网页。 Android有三个基本组件--Activity,Service,BroadcastReceiver,它们都是通过Intent机制激活的,而不同类型的组件有不同的传递Intent的方式。 1.要激活一个新的Activity,或者让现有的Activity执行新的操作,可以通过调用Context.startActivity()或者Activity.startActivityForResult()方法。这两个方法需要传入的Intent参数也称为Activity Action Intent,根据Intent对象对目标Activity描述的不同,来启动与之匹配的Activity或传递信息。 2.要启动一个新的服务或者向一个已有的服务传递新的指令,调用Context.startService()方法或者调用Context.bindService()方法将调用此方法的上下文对象与Service绑定。 3.通过Context.sendBroadcast()、Context.sendOrderBroadcast()和Context.sendStickBroadcast()这三个方法可以发送BroadcastIntent。BroadcastIntent发送后。所有已注册的拥有与之相匹配的IntentFilter的BroadcastReceiver就会被激活。这种机制广泛运用于设备和系统状态变化的通知。一个常见的例子是,当Android的电池电量过低时,系统就会发送Action为BATTERY_LOW的广播,接着任何可匹配该Action的IntentFilter注册的BroadcastReceiver都会各自运行自己自定义的处理代码,比如关闭设备的WIFI和GPS以节省电量。 Intent一旦发出,Android都会准确的找到相匹配的一个或多个Activity、Service或BroadcastReceiver作为响应。所以不同类型的Intent消息不会发生重叠:BroadcastIntent消息只会发送给BroadcastReceiver,由startActivity()传递的消息只能送给Activity,由startService()传递的Intent只能发送给service。 如何解析Intent 对于明确指出了目标组件名称的Intent,我们称之为“显式Intent”,对于没有明确指出目标组件名称的Intent,我们称之为“隐式Intent”。Android系统使用IntentFilter来寻找与隐式Intent相关的对象。 IntentFilter 应用程序的组件为了告诉Android自己能响应、处理哪些隐式Intent请求,可以声明一个甚至多个IntentFilter。 <intent-filter> <action android:name="android.Intent.Action.MAIN"/> <category android:name="android.Intent.Category.LAUNCHER"/> </intent-filter> |
|