如何获得我的活动上下文?

我真的不知道这个东西是如何工作的,所以如果我有一些需要扩展Activity的类B的上下文的类B ,我该如何获取上下文?

我正在寻找一种更有效的方法,然后将上下文作为parameter passing给A类构造函数,因为如果A类将有数百万个实例,那么我们最终会得到数百万个冗余指针,而我们应该能够以某种方式只有一个地方和一个吸气function…

你可以使用Application类(公共类在android.application包中),即:

那些需要维护全局应用程序状态的基类。 你可以通过在你的AndroidManifest.xml的标签中指定它的名字来提供你自己的实现,当你的应用程序/包的进程被创build时,这个类将会被实例化。

要使用这个类做:

 public class App extends Application { private static Context mContext; public static Context getContext() { return mContext; } public static void setContext(Context mContext) { this.mContext = mContext; } ... } 

在你的清单中:

 <application android:icon="..." android:label="..." android:name="com.example.yourmainpackagename.App" > class that extends Application ^^^ 

在活动B:

 public class B extends Activity { public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.sampleactivitylayout); App.setContext(this); ... } ... } 

在A类中:

 Context c = App.getContext(); 

注意

通常不需要子类Application。 在大多数情况下,静态单例可以以更模块化的方式提供相同的function。 如果你的单例需要一个全局上下文(例如注册广播接收者),那么检索它的函数可以被赋予一个Context,它在第一次构造单例时在内部使用Context.getApplicationContext()。

好的,我将举一个小例子说明如何去做你所要求的

 public class ClassB extends Activity { ClassA A1 = new ClassA(this); // for activity context ClassA A2 = new ClassA(getApplicationContext()); // for application context. } 

获取活动上下文的最好和简单的方法是把.this放在Activity的名字后面。 例如:如果你的Activity的名字是SecondActivity ,它的上下文将是SecondActivity.this

您将上下文传递给它的构造函数中的类B,并确保您传递getApplicationContext()而不是activityContext()

如果您需要B中的A的上下文,则需要将它传递给B,并且可以通过将Activity A作为parameter passing给其他人。 我没有看到有很多A的实例有自己的指针B的问题,不知道这是否甚至是一个开销。

但是,如果这是问题,就像@hasanghaforianbuild议的那样,把A的指针保持为Application类的一个全局的,可变的types。 事实上,取决于你需要什么上下文,你甚至可以使用Application的上下文来代替。

我build议阅读关于上下文的这篇文章 ,以便更好地弄清楚你需要什么上下文。

您可以使用类A的参数Context来创build构造函数,然后您可以使用此上下文。

上下文c;

A(Context context){this.c = context}

从B活动中,使用此构造函数创build类A的对象,并传递getApplicationContext()。