1. 程式人生 > >對於Intent和IntentFilter的理解記錄

對於Intent和IntentFilter的理解記錄

來自:http://blog.csdn.net/fhx123fhx123/article/details/7906113

來個通俗的比方:

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()給出,判斷資料庫是否存在,如果不存在則根據資料庫名建立一個。

如果資料庫存在,則根據建構函式傳入的版本號去建立表或者升級表。