14 1 全域性獲取Context 的技巧

2021-10-08 10:46:34 字數 1449 閱讀 7476

回想這麼久以來我們所學的內容,你會發現有很多地方都需要用到 context,彈出 toast 的時侯需要,啟動活動的時侯需要,傳送廣播的時候需要,運算元據庫的時侯需要,使用通知的時候需要……。

或許目前你還沒有為得不到 context 而發愁過,因為我們很多的操作都是在活動中進行的,而活動本身就是乙個 context 物件。但是,當應用程式的架構逐漸開始複雜起來的時候,很多的邏輯**都將脫離 activity 類,但此時你又恰恰需要使用 context,也許這個時候你就會感到有些傷腦筋了。

例如,在第12 章的kotlin 課堂中,我們編寫了乙個toast.kt 檔案,並在這裡對toast 的用法進行了封裝,**如下所示:

fun string.showtoast(context: context,duration: int = toast.length_short)

fun int.showtoast(context: context,duration: int = toast.length_short)

可以看到,由於toast 的maketext() 方法要求傳入乙個context 的引數,但是當前**既不在activity 中,也不在service 中,是沒有辦法直接獲取context 物件的。於是這裡我們只好給showtoast()  方法新增了乙個context 引數,讓呼叫showtoast() 方法的人傳遞乙個context 物件進來。

雖說這也是一種解決方法,但是有點推卸責任的嫌疑,因為我們將獲取context 的任務轉移給了 showtoast() 方法的呼叫方,至於呼叫方能不能得到context 引數,那就不是我們需要考慮的問題了。

由此可以看出,在某些情況下,獲取context 並非是那麼容易的一件事,有時候還是挺傷腦筋的。不過別擔心,下面我們就來學習一種技巧,讓你在專案的任何地方都能夠輕鬆獲取context 。

companion object

override fun oncreate() }

需要注意的是,將context 設定成靜態變數很容易會產生記憶體洩漏的問題,所以這是一種有風險的做法,因此android studio 會給出警告提示。

companion object

override fun oncreate()

}

<?xml version="1.0" encoding="utf-8"?>

那麼接下來我們再對showtoast() 方法進行優化,**如下所示:

fun string.showtoast(duration: int = toast.length_short)

fun int.showtoast(duration: int = toast.length_short)

"this is toast".showtoast()
有了這個技巧,你就再也不用為得不到context 物件而發愁了。

獲取全域性Context

private static context context override public void oncreate public static context getcontext 如下 以上來自 第一行 context context是維持android程式中各元件能夠正常工作的乙個核心功能...

FC 13 1 全域性獲取Context

在很多地方需要用到context,彈出toast 啟動活動 傳送廣播 使用通知等。活動本身就是乙個context物件,但是很多情況下邏輯 將脫離activity類,但又需要context,這時我們就需要乙個解決方案來解決這個問題了。提供getcontext方法,將獲取的context進行返回 修改a...

Android 中呼叫全域性Context

經常需要用到系統的一些功能必須傳遞context物件,往往有時候不方便傳遞當前的context或者即使能夠傳遞context也非常麻煩,比如 audiomanager aduiomanager audiomanager context.getsystemservice context.audio s...