3 回答
TA贡献1776条经验 获得超12个赞
如果我可以使上下文静态,我会感到困惑。它有任何副作用吗?
您可以将上下文声明为静态,但在 Android 中不建议这样做,因为它可能会导致您的应用程序出现内存泄漏。
有没有其他方法可以在不使用上下文的情况下访问我的资源?
不,您需要一个上下文实例来访问应用程序中的资源。
回到您的案例,最简单的方法是将上下文作为方法的参数传递。
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例如,在您的活动中,在调用时作为上下文传递setTextColor。
setTextColor(this, new SpannableStringBuilder(), 0, false);
TA贡献2011条经验 获得超2个赞
在 Kotlin 中,您可以通过创建一个扩展 Application 的类并将应用程序上下文存储在伴随对象中来实现这一点。
通常它看起来类似于这样:
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
关于您对存储静态上下文的担忧,如果您正在存储活动或片段上下文,那么您可能会产生内存泄漏,但由于我们正在存储与整个应用程序的生命周期相关的应用程序上下文,因此不会不是内存泄漏的任何问题。
如果您想编写依赖于静态上下文的可测试代码,您可能会遇到问题,在这种情况下,我建议您将上下文传递给函数而不是直接访问它。
TA贡献1874条经验 获得超12个赞
1)创建扩展应用程序的应用程序类
private static Context context;
@Override
public void onCreate() {
super.onCreate();
context = getApplicationContext();
2) 创建返回上下文的 getApplicationContext() 方法
public static Context getApplicationContext() {
return context;
}
3)现在您可以在课堂上的任何地方获取上下文,例如
Context context = App.getContext().getApplicationContext();
添加回答
举报