對於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()給出,判斷資料庫是否存在,如果不存在則根據資料庫名建立一個。
如果資料庫存在,則根據建構函式傳入的版本號去建立表或者升級表。