【问题标题】:Is passing context through a static class efficient way or not?是否通过静态类有效的方式传递上下文?
【发布时间】:2011-05-10 07:59:01
【问题描述】:

在 android 中,我需要引用“context”或者说将“context”传递给几个类。为此,我实现了一个静态类,它通过它保存“上下文”和所有其他类访问上下文。

//let's say I have a static class DataHolder 
//and my main acitivity i.e. whose context need to be refrenced

 public class DataHolder{
        public static Context context;
    }

public class MainActivity extends Activity{
    public void onCreate(Bundle bundle){
     DataHolder.context = getApplicationContext();
   }
}

那么,这个过程是可以实现还是不是在Android应用程序中引用的正确方法。

【问题讨论】:

  • 感谢亚历克斯和维森特的洞察力。我没有那样看。但我确实想问一个问题,如果在任何活动中破坏或方向改变或任何类似的地方不再需要活动,那么如果我给静态参考空值,它是否仍然会引发内存泄漏。不管怎样,再次感谢你们俩的回复

标签: android android-context


【解决方案1】:

这里的问题不在于效率,而在于静态存储上下文的固有风险。

上下文可以在许多事件中发生变化,最有可能的是更改设备方向,因此您不应该总是对其进行中继。我认为您应该将构造函数中的 Context 传递给您认为会使用它的每个类(或者,更确切地说,重新设计您的代码,以便在它不可用的地方不需要它,尽管这可能有点棘手)。

在最坏的情况下,您应该尽可能频繁地更新它。但是,话又说回来,让它始终可以访问有什么意义呢?我认为风险是不值得的(抱歉,如果这听起来很粗鲁,我不是故意的)精心设计的应用程序。

【讨论】:

    【解决方案2】:

    您应该绝对避免它,因为它可能会导致内存泄漏。 阅读:Avoiding memory leaks

    这意味着视图引用了整个活动,因此也引用了您的活动所持有的任何内容;通常是整个视图层次结构及其所有资源。因此,如果您泄漏 Context(“泄漏”意味着您保留对它的引用,从而阻止 GC 收集它),则会泄漏大量内存。如果你不小心,泄露整个活动真的很容易

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-02
      • 2021-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多