Android Context

                                                                                          Android Context的幾點看法

經過大量搜索,對context這個難以理解的術語有了點清晰的認識。

 

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

.........

}

}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章