对于Intent和IntentFilter的理解记录

来源:互联网 发布:瑞文被削弱之前的数据 编辑:程序博客网 时间:2024/05/05 03:19

来个通俗的比方:

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()给出,判断数据库是否存在,如果不存在则根据数据库名创建一个。

如果数据库存在,则根据构造函数传入的版本号去创建表或者升级表。