什么是Context?
讀過書的大家腦海里應該會有這么一個場景:
“請聯系上下文,分析這句話在文中的作用。”
在于文中,我們吧上下文理解為語境,在程序中,我們可以響應的將上下文理解為:當前對象在程序中所出的一個環境,一個系統交互過程——這就是Context。
Android 應用程序在一下幾種情況下會創建一個Context:
? ? 1、創建一個Application
? ? 2、創建一個Activity
? ? 3、創建一個Service
讀過源碼的同學應該會比較清楚Application、Activity、Service與Context的關系——即它們三個都是Context的子類。所以不難理解,不通對象的Context的生命周期會有相應的差別。Application伴隨者App的整個生命周期,所以Application的Context對象也是一個貫穿整個App生命周期的Context對象,Activity,service的Context對象都與它們的生命周期相對應。
Context的那些坑
1、內存泄漏
圖1.1
上面的單利引用了一個Context,看這好像沒什么問題,但是Context的來源是不能確定的,當MyUtil這個類被引用了,其所引用的Context就是一直被引用進而造成持有這個Context的類一直得不到釋放,故會造成內存的泄漏。
一般我們可以采用一下的方法進行優化:
圖1.2