为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

米琪卡哇伊 2022-07-20 12:24:46
我有一个静态函数,我需要在其中访问我的颜色资源。为了访问颜色资源,我需要静态的上下文变量。如果我可以使上下文静态,我会感到困惑。它有任何副作用吗?或者,有没有其他方法可以在不使用上下文的情况下访问我的资源这是功能 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;  } 
查看完整描述

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); 


查看完整回答
反对 回复 2022-07-20
?
森林海

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


关于您对存储静态上下文的担忧,如果您正在存储活动或片段上下文,那么您可能会产生内存泄漏,但由于我们正在存储与整个应用程序的生命周期相关的应用程序上下文,因此不会不是内存泄漏的任何问题。


如果您想编写依赖于静态上下文的可测试代码,您可能会遇到问题,在这种情况下,我建议您将上下文传递给函数而不是直接访问它。


查看完整回答
反对 回复 2022-07-20
?
HUWWW

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();


查看完整回答
反对 回复 2022-07-20
  • 3 回答
  • 0 关注
  • 83 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信