是通过静态类有效的方式传递上下文吗?

时间:2011-05-10 07:59:02

标签: android android-context

在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应用程序中引用的正确方法。

2 个答案:

答案 0 :(得分:4)

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

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

在最糟糕的情况下,您应该尽可能频繁地更新它。但是,再一次,让它始终可以访问的重点是什么?我认为风险不值得做一个仔细的应用程序设计的懒惰(抱歉,如果这听起来很粗鲁,我不是故意的)。

答案 1 :(得分:0)

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

  

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