什么是Context?
讀過書的大家腦海里應(yīng)該會有這么一個場景:
“請聯(lián)系上下文,分析這句話在文中的作用?!?/i>
在于文中,我們吧上下文理解為語境,在程序中,我們可以響應(yīng)的將上下文理解為:當(dāng)前對象在程序中所出的一個環(huán)境,一個系統(tǒng)交互過程——這就是Context。
Android 應(yīng)用程序在一下幾種情況下會創(chuàng)建一個Context:
? ? 1、創(chuàng)建一個Application
? ? 2、創(chuàng)建一個Activity
? ? 3、創(chuàng)建一個Service
讀過源碼的同學(xué)應(yīng)該會比較清楚Application、Activity、Service與Context的關(guān)系——即它們?nèi)齻€都是Context的子類。所以不難理解,不通對象的Context的生命周期會有相應(yīng)的差別。Application伴隨者App的整個生命周期,所以Application的Context對象也是一個貫穿整個App生命周期的Context對象,Activity,service的Context對象都與它們的生命周期相對應(yīng)。
Context的那些坑
1、內(nèi)存泄漏

圖1.1
上面的單利引用了一個Context,看這好像沒什么問題,但是Context的來源是不能確定的,當(dāng)MyUtil這個類被引用了,其所引用的Context就是一直被引用進(jìn)而造成持有這個Context的類一直得不到釋放,故會造成內(nèi)存的泄漏。
一般我們可以采用一下的方法進(jìn)行優(yōu)化:

圖1.2