1.首先什麼是context? this
官方文檔的語焉不詳,說是resource什麼的,反正是沒看懂,實際上能夠認爲它是一個指向parent(父親)對象的指針,受到那個 parent 對象的控制。 指針
2.爲何須要context? 對象
試想一下這個語句: 生命週期
Button myButton =newButton(this); 事件
這個this就是context,前面說了它指向了parent對象,那指向了哪裏?爲何須要這麼作?緣由是Button爲了能完成本身的使命(響應各類操做)就得讓Android系統知道本身是屬於哪一個Activity的,這個信息是必須的,由於只有這樣Android系統纔會對其進行管理,好比響應onClick()事件,不然系統連Button是屬於哪一個Activity的都不知道,怎麼響應呢?若是Button的context和Activity的context是同樣的,那麼它們都是可見的,好比上面那個button跟Activity同樣是可見的,它們的context指向另外一個不可見的對象,也就是它們受那個不可見的對象控制,我理解爲系統。 文檔
3.Application context和Activity context。 get
這是兩種不一樣的context,也是最多見的兩種。第一種中context的生命週期與Application的生命週期相關的,context隨着Application的銷燬而銷燬,第二種中的context跟Activity的生命週期是相關的,可是對一個Application來講,Activity能夠銷燬幾回,那麼屬於Activity的context就會銷燬屢次。至於用哪一種context,得看應用場景,我的感受用Activity的context好一點,不過也有的時候必須使用Application的context。 it
舉例來講:SQLite創建時是須要context的,那麼咱們怎麼傳呢? io
1、創建SQLiteOpenHelper 的子類 table
public class mySQLiteHelper extends SQLiteOpenHelper {
..........
public DBOpenHelper(Context context, String name, CursorFactory factory,
int version) {
super(context, name, factory, version);
// TODO Auto-generated constructor stub
}
.......
}
2、咱們用另外一個類封裝一下這個類,完善數據查詢、插入、刪除、更新等操做,具體方法不表。
public class DBManager {
//定義上面那個類對象;
private mySQLiteHelper dbHelper;
//注意這裏得定義一個context,你想直接獲得是得不到的,須要調用這個類的對象本身傳一個context過來,這個context再將獲得的context傳到mySQLiteHelper 那個類去。
private Context context;
//構造方法
public DBManager (Context context) {
this.context = context;
dbHelper = new DBOpenHelper(context,DB_NAME,null,VERSION);
db = dbHelper.getWritableDatabase();
}
}
3、最後,咱們在一個Activity中進行調用
public class myActivity extends Activity {
private DBManager db;
public void onCreate(Bundle savedInstanceState) {
........
//dbmgr = new DataManager(getApplicationContext()); 第一種
dbmgr = new DataManager(this); //第二種
//兩種方法均可以,第一種是Application的context,第二種是Activity的context
.........
}
}