【问题标题】:Static Context: Is it worth it?静态上下文:值得吗?
【发布时间】:2022-01-09 08:36:08
【问题描述】:

我的应用程序类中有这段代码:

public class MyApp extends MultiDexApplication {
 
    private static Application context;
 
    @Override
    public void onCreate(){
        super.onCreate();
        context = this;  
    }
 
    @Override
    protected void attachBaseContext(Context base) {
        super.attachBaseContext(base); 
    }

    public static Context getAppContext() {
        return context.getApplicationContext();
    }
}

当我想访问上下文时,我使用以下代码:

Context context = MyApp.getAppContext();

我多次阅读过以静态方式访问 Context 的缺点,例如内存泄漏。我即将发布一个我过去几年一直在开发的大型应用程序,我想知道是否应该改变我目前的方法。

到目前为止,我还没有遇到任何内存泄漏问题,但我还没有在多种设备上测试我的应用程序,也没有在大规模生产中测试。

有没有人在他发布的应用中使用过这种方法,发现这段代码没有问题?

【问题讨论】:

  • 这和android studio没关系吧?仅仅使用IDE并不意味着你必须为其添加标签,标签只有在询问IDE本身的功能时才会出现
  • 老实说,我真的不认为有必要使用这样的上下文,通常感觉就像是一种懒惰的方法,可以在需要的时候/在哪里使用上下文,而且通常它已经可以用于你,但是已经有很多关于这个的帖子和问题了
  • 我知道这是一种懒惰的方法。虽然时间管理很重要,但如果您要处理超过 200.000 行代码的项目,则需要尽量减少所有内容。
  • time management is important 这与时间管理无关。使用MyApp.getAppContext() 或使用requireContext() 或等效的方法在您需要的时间和地点获取上下文几乎没有什么区别。如果您要花费数天/数小时来获取所需的上下文,那么您可能需要更多地复习基础知识,因为获取上下文应该是您最不必担心的事情
  • 实际上确实如此。这不仅仅是您请求上下文变量的地方,还涉及将变量从方法传递到方法。当我使用 MyApp.getAppContext() 获取上下文时,代码看起来更清晰。

标签: android performance memory-leaks android-context


【解决方案1】:

据我所知,静态类中上下文引用的问题主要在于 Activity 或 Fragment 类。 活动可以生存和死亡,您不知道上下文是否仍然有效。 使用 Application Context 时,在应用程序中执行代码时,您可以非常确定 ref 有效且应用程序处于活动状态。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-03
    相关资源
    最近更新 更多