標籤:android class ext get 使用 資料
1.首先什麼是context?
文檔語焉不詳,說是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。
這是兩種不同的context,也是最常見的兩種。第一種中context的生命週期與Application的生命週期相關的,context隨著Application的銷毀而銷毀,第二種中的context跟Activity的生命週期是相關的,但是對一個Application來說,Activity可以銷毀幾次,那麼屬於Activity的context就會銷毀多次。至於用哪種context,得看應用情境,個人感覺用Activity的context好一點,不過也有的時候必須使用Application的context。
舉例來說:SQLite建立時是需要context的,那麼我們怎麼傳呢?
一、建立SQLiteOpenHelper 的子類
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
}
.......
}
二、我們用另一個類封裝一下這個類,完善資料查詢、插入、刪除、更新等操作,具體方法不表。
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();
}
}
三、最後,我們在一個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
.........
}
}