背景之间的差异

时间:2012-07-23 08:15:30

标签: android memory-leaks this android-context

  

可能重复:
  Android - what's the difference between the various methods to get a Context?

我想知道使用thisClassName.thisgetApplicationContext()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。也许还有一些例子可以帮助:)

2 个答案:

答案 0 :(得分:1)

应用程序上下文与应用程序的生命周期以及活动上下文绑定到Activity的生命周期。因此每个人都有自己的范围,并且必须用于在该级别上检索信息。

通常,您应该始终使用Acitity Context,除非您需要一个生命周期与当前活动分开的上下文。

可能导致内存泄漏的是使用Application Context,将其绑定到应该被垃圾收集的对象,但是保留这个相关属性(应用程序上下文),它们被阻止被收集。

答案 1 :(得分:1)

ActivityApplication都是从Context类派生的。因此,当您的代码是Activity或Application类的一部分时,可以使用this代替Context对象。在其中一个之外(例如,在Fragment中),您可以调用getActivity()来获取封闭的Activity(并将其用作上下文)。 getApplicationContext()是您的Activity获取比自身更广泛的Context的方式。如果您需要在活动的生命周期之外使用Context(例如,将其传递给长时间运行的后台线程),您可能需要这样做。

您可能不需要Toast中的Application上下文。但是,通过使用它,您的Toast应该能够保持可见,并且即使您将Activity保留在启动它的位置也不会导致任何崩溃。

相关问题