Activity 中的 Android 上下文可以是静态的吗?

我有一个静态函数,我需要在其中访问我的颜色资源。为了访问颜色资源,我需要静态的上下文变量。如果我可以使上下文静态,我会感到困惑。它有任何副作用吗?或者,有没有其他方法可以在不使用上下文的情况下访问我的资源


这是功能


 private static SpannableStringBuilder setTextColor(

      SpannableStringBuilder Text, int spanLength, boolean isSuggestion) {

    addressText.setSpan(

        new ForegroundColorSpan(

            context

                .getResources()

                .getColor(

                    isSuggestion ? R.color.blur: R.color.red)),

        addressText.length() - 1 - spanLength,

        addressText.length(),

        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

    return Text;

  } 


米琪卡哇伊
浏览 100回答 3
3回答

叮当猫咪

如果我可以使上下文静态,我会感到困惑。它有任何副作用吗?您可以将上下文声明为静态,但在 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); 

森林海

在 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关于您对存储静态上下文的担忧,如果您正在存储活动或片段上下文,那么您可能会产生内存泄漏,但由于我们正在存储与整个应用程序的生命周期相关的应用程序上下文,因此不会不是内存泄漏的任何问题。如果您想编写依赖于静态上下文的可测试代码,您可能会遇到问题,在这种情况下,我建议您将上下文传递给函数而不是直接访问它。

HUWWW

1)创建扩展应用程序的应用程序类private static Context context;@Overridepublic void onCreate() {    super.onCreate();    context = getApplicationContext();2) 创建返回上下文的 getApplicationContext() 方法public static Context getApplicationContext() {  return context;}3)现在您可以在课堂上的任何地方获取上下文,例如Context context = App.getContext().getApplicationContext();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java