關於Android Context一些總結

來源:互聯網
上載者:User

標籤: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

.........

}

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.