来个通俗的比方:
Intent比作一个人
IntentFilter比作一个饭店
1、如果一个人想吃东西(Intent的action),而酒店中提供吃东西(Intent-Filter的action),则匹配成功。
2、如果一个人想吃东西(Intent的action),而酒店中提供吃东西和睡觉(Intent-Filter的action),则匹配成功。
3、如果一个人想吃东西和睡觉(Intent的action),而酒店中提供吃东西和睡觉(Intent-Filter的action),则匹配成功。
4、如果一个人想吃东西和睡觉(Intent的action),而酒店中提供吃东西(Intent-Filter的action),则匹配不成功。
5、如果一个人想吃东西(Intent的action)而且只吃米饭(Intent的gategory),而酒店中提供吃东西(Intent-Filter的action)且提供米饭(Intent的gategory),则匹配成功。
6、如果一个人想吃东西(Intent的action)而且只吃米饭(Intent的gategory),而酒店中提供吃东西(Intent-Filter的action)且只提供面包(Intent的gategory),则匹配不成功。
7、如果一个人想吃东西(Intent的action)而且只吃米饭(Intent的gategory),而酒店中提供吃东西(Intent-Filter的action)且提供米饭和面包(Intent的gategory),则匹配成功。
8、如果这个人开了一辆车(Intent的data),而酒店没有提供车库(Intent-Filter的data),则匹配不成功。
9、如果这个人开了一辆车(Intent的data),而酒店有提供车库(Intent-Filter的data),且没有限制车的类型,则匹配成功。
总结:Intent所带有的东西应该都是Intent-Filter都有提供的。
附加:data、ContentProvide和ContentResolver的理解
ContentProvide对data封装之后会向外界提供一个URI的链接,在系统启动的过程中应该是注册了这个URI,而ContentResolver会根据这个URI去查找对应的ContentProvider。
如果data来自于数据库则要用到另外的一个类SQLiteOpenHelper。
SQLiteOpenHelper的构造函数public SQLiteOpenHelper(Context context, String name, CursorFactory factory, int version)
参数分别是:上下文,数据库名,创建cursor的类(一般默认为null),数据库版本号。
而数据库的创建和升级都是由getWritableDatabase()给出,判断数据库是否存在,如果不存在则根据数据库名创建一个。
如果数据库存在,则根据构造函数传入的版本号去创建表或者升级表。