Android基础系列-----------Intent简析

        在Android系统设计中,Intent可以被应用于除ContentProvider外的其他三种组件(即Activity,Service和BroadcastReceiver)。

一、Intent属性

1、ComponentName
        Intent分为显性(Explicit Intents)和隐性(Implicit Intents)。如果在Intent中特别指定了目标方的“Component Name”,同时指定它所在的PackageName,比如:“com.example.project.HelloActivity“,那么系统就会直接将此Intent发往这个特定的应用,而不需要做额外的匹配工作。
2、Category
        它将Intent从大的方向上进行区分和归类。Intent的所有属性值实际上都只是一串字符,因而是可以自定义的。
3、Action
        表明要做什么,或者什么事件发生了(常用于广播的情况。比如设备开机时会有系统广播发出。如果应用程序希望实现开机自启动,就可以监听这个广播)。用户也可以自定义唯一的Action。
4、Data
        如果上面的Action中表明了某人去公安局办理签证,那么这里的Data就作为签证业务的补充材料,Action理论上是围绕Data提供的数据来开展业务的。当然也有不需要Data补充信息的情况,如在ACTION_CALL的情况下,电话号码是必须作为Data来传递的;而针对Broadcast(如ACTION_SCREEN_ON)组件的Action,它们本身就蕴含了足够的信息,因而不需要Data的支持。不同的Action,其对应的Data格式会有差异。
5、Extras
        Extras可以理解为Extra Data,是对上面Data属性的补充。不过两者在数据的格式上有明显区别。Data采用了类似scheme://uri的表达方式;而Extras则是一种键值对实现。它们在表达不同场景的数据时有各自的优势,使用时应具体问题具体分析。发送方通过一系列putXxx()方法将键值对存入Intent中,然后接收方 就可以用相对应的getXxx()来获取这些Extra数据,这些方法内部会维护一个Bundle对象来保证进程间数据的准确传输。
6、Flags
        Flags和Activity中的LaunchMode功能基本相同,它规定了系统如何去启动一个Activity(比如指定即将启动的Activity应该属于哪一个Task)。

二、Intent匹配规则

        Intent是和Intent-filter配套使用的。具体而言,Intent-filter是每个组件的属性标签,它们在AndroidManifest.xml声明时就已经贴上了。而Intent则是程序运行过程中产生的实时需求,系统接收到这些请求后与现有的Intent-filter进行匹配,然后选择最合适的组件元素以响应。打个比方,Intent代表了女生的择偶意愿,而Intent-filter则是众男生的属性描述——年龄、长相、收入等。        
Intent的典型匹配过程包括如下几个步骤
1、注册组件
        除了在AndroidManifest.xml中静态注册外,BroadcastReceiver还可以在程序运行中进行动态注册。这两种方式区别如下:
  • 静态注册
             也即应用程序事先将Intent-filter写到AndroidManifest.xml文件中。
  • 动态注册
             例如:
public class DynamicBroadcastReceiver extends BroadcastReceiver {

	@Override
	public void onReceive(Context context, Intent intent) {
		if (android.intent.action.BOOT_COMPLETED.equals(intent.getAction)) {
			//相应处理
		} else {
			//其他处理
		}
	}

}
IntentFilter filter = new IntentFilter();
filter.addAction("android.intent.action.BOOT_COMPLETED");
registerReceiver(new DynamicBroadcastReceiver(), filter);

2、发起方主动向系统提供Intent
        Activity---->对应startActivity();
        Service---->对应startService();
        BroadcastReceiver---->对应sendBroadcast();
3、系统将Intent和对应组件类型里所有的intent-filter进行匹配,以寻找最佳结果
        影响Intent匹配规则的只有3个关键因素,即:
  • Category
  • Action
  • Data
        而其余两个属性Extras和Flags则只有在选中的组件运行后才能起作用。每个Component都可以有若干个intent-filter,每个filter里的上述3种属性都可以不是唯一的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值