可能重复:
Android - what's the difference between the various methods to get a Context?
我想知道使用this
,ClassName.this
,getApplicationContext()
或myContext
之间的区别是什么?
在下面的Toast中使用每个作为上下文有什么影响?
public class ClassName extends Activity {
final ClassName myContext = this;
...
public void onCreate(Bundle savedInstanceState) {
...
button.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
Toast.makeText(getApplicationContext(), "This is a toast", Toast.LENGTH_LONG).show();
}
});
}
你能指点我对背景的详细解释吗?我读过Romain Guy的帖子here。也许还有一些例子可以帮助:)
答案 0 :(得分:1)
应用程序上下文与应用程序的生命周期以及活动上下文绑定到Activity的生命周期。因此每个人都有自己的范围,并且必须用于在该级别上检索信息。
通常,您应该始终使用Acitity Context,除非您需要一个生命周期与当前活动分开的上下文。
可能导致内存泄漏的是使用Application Context,将其绑定到应该被垃圾收集的对象,但是保留这个相关属性(应用程序上下文),它们被阻止被收集。
答案 1 :(得分:1)
Activity和Application都是从Context类派生的。因此,当您的代码是Activity或Application类的一部分时,可以使用this
代替Context对象。在其中一个之外(例如,在Fragment中),您可以调用getActivity()
来获取封闭的Activity(并将其用作上下文)。 getApplicationContext()是您的Activity获取比自身更广泛的Context的方式。如果您需要在活动的生命周期之外使用Context(例如,将其传递给长时间运行的后台线程),您可能需要这样做。
您可能不需要Toast中的Application上下文。但是,通过使用它,您的Toast应该能够保持可见,并且即使您将Activity保留在启动它的位置也不会导致任何崩溃。