3 回答
TA貢獻(xiàn)1776條經(jīng)驗 獲得超12個贊
如果我可以使上下文靜態(tài),我會感到困惑。它有任何副作用嗎?
您可以將上下文聲明為靜態(tài),但在 Android 中不建議這樣做,因為它可能會導(dǎo)致您的應(yīng)用程序出現(xiàn)內(nèi)存泄漏。
有沒有其他方法可以在不使用上下文的情況下訪問我的資源?
不,您需要一個上下文實例來訪問應(yīng)用程序中的資源。
回到您的案例,最簡單的方法是將上下文作為方法的參數(shù)傳遞。
private static SpannableStringBuilder setTextColor(Context context, SpannableStringBuilder Text, int spanLength, boolean isSuggestion) {
int color = context.getResources().getColor(isSuggestion ? R.color.blur : R.color.red);
addressText.setSpan(new ForegroundColorSpan(color),
addressText.length() - 1 - spanLength,
addressText.length(),
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return Text;
}
this例如,在您的活動中,在調(diào)用時作為上下文傳遞setTextColor。
setTextColor(this, new SpannableStringBuilder(), 0, false);
TA貢獻(xiàn)2011條經(jīng)驗 獲得超2個贊
在 Kotlin 中,您可以通過創(chuàng)建一個擴(kuò)展 Application 的類并將應(yīng)用程序上下文存儲在伴隨對象中來實現(xiàn)這一點。
通常它看起來類似于這樣:
class App : Application() {
override fun onCreate() {
super.onCreate()
instance = this
}
companion object {
private var instance: App? = null
val context: Context?
get() = instance?.applicationContext
}
}
您可以在任何地方通過以下方式訪問上下文App.context
關(guān)于您對存儲靜態(tài)上下文的擔(dān)憂,如果您正在存儲活動或片段上下文,那么您可能會產(chǎn)生內(nèi)存泄漏,但由于我們正在存儲與整個應(yīng)用程序的生命周期相關(guān)的應(yīng)用程序上下文,因此不會不是內(nèi)存泄漏的任何問題。
如果您想編寫依賴于靜態(tài)上下文的可測試代碼,您可能會遇到問題,在這種情況下,我建議您將上下文傳遞給函數(shù)而不是直接訪問它。
TA貢獻(xiàn)1874條經(jīng)驗 獲得超12個贊
1)創(chuàng)建擴(kuò)展應(yīng)用程序的應(yīng)用程序類
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
2) 創(chuàng)建返回上下文的 getApplicationContext() 方法
public static Context getApplicationContext() {
return context;
}
3)現(xiàn)在您可以在課堂上的任何地方獲取上下文,例如
Context context = App.getContext().getApplicationContext();
添加回答
舉報
