【问题标题】:use static android context in static method在静态方法中使用静态 android 上下文
【发布时间】:2020-05-24 19:37:22
【问题描述】:

我有一个像这样的PrefUtils 类:

public class PrefUtils {

    public PrefUtils() {
    }

    private static SharedPreferences getSharedPreferences(Context context) {
        return context.getSharedPreferences("APP_PREF", Context.MODE_PRIVATE);
    }

    public static void storeAccessToken(Context context, String access_token) {
       SharedPreferences.Editor editor = getSharedPreferences(context).edit();
       editor.putString("Access_Token", access_token);
       editor.commit();
    }

    public static String getAccessToken(Context context) {
        return getSharedPreferences(context).getString("Access_Token", null);
    }
}

在我的MainActivity 中,我有一个静态方法,我应该为它使用一个静态上下文:

public class MainActivity extends AppCompatActivity {

private static Context mcontex;
// Is It right To Add Context To static Variable???

@SuppressLint("CheckResult")
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    my_method();

}
    public static void my_method(){
        String access_token =PrefUtils.getAccessToken(mcontex);
        // more code ...
    }
}

给静态变量加Context对吗? Android Studio 说:“不要将 Android Context 类放在静态字段中”。 这会导致像内存泄漏这样的错误吗?如果答案是肯定的,那么正确的方法是什么?

【问题讨论】:

    标签: android memory-leaks android-context


    【解决方案1】:

    Context 作为参数传递给方法,而不是将context 保存在静态变量中。

    public static void myMethod(@NonNull Context context){
    
            String access_token =PrefUtils.getAccessToken(context);
            // more code ...
        }
    

    拥有静态上下文变量的缺点是不能保证在某些静态初始化代码尝试获取静态上下文对象之前调用非静态 onCreate()。这意味着您的调用代码需要准备好处理空值。

    【讨论】:

    • 谢谢,它的答案很好——我应该说我在另一个片段中使用了这个方法。
    • 为什么不呢?只需将当前上下文从任何地方传递给方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2015-10-21
    • 1970-01-01
    • 2011-11-03
    • 2015-03-18
    相关资源
    最近更新 更多