2

可能重复:
Android - 获取上下文的各种方法有什么区别?

我想知道使用 , 或 之间thisClassName.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 的帖子。也许更多的例子会有所帮助:)

4

2 回答 2

1

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

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

于 2012-07-23T08:41:03.243 回答
1

应用程序上下文与应用程序的生命周期相关联,而活动上下文与活动的生命周期相关联。因此,每个都有其范围,并且必须用于在该级别检索信息。

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

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

于 2012-07-23T08:23:05.647 回答