我想知道使用this、ClassName.this、getApplicationContext()或myContext有什么区别
在下面的演讲会中使用每一个作为上下文的效果是什么?
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();
}
});
}你能告诉我对上下文的详细解释吗?我读过罗曼·盖伊的博文这里。也许更多的例子可能会有所帮助:)
发布于 2012-07-23 08:23:05
应用程序上下文与应用程序的生命周期相关联,活动上下文与活动的生命周期相关联。因此,每一个都有它的范围,并且必须被用来在那个级别上提取信息。
通常,您应该始终使用Acitity上下文,除非您需要一个生命周期与当前活动分离的上下文。
导致内存泄漏的是应用程序上下文的使用,将其绑定到应该被垃圾收集的对象,但是保留这个相关的属性(应用程序上下文),它们将被阻止被收集。
发布于 2012-07-23 08:41:03
活动和应用程序都是从上下文类派生的。因此,当代码是活动类或应用程序类的一部分时,可以使用this代替上下文对象。在其中一个(例如,在片段中)之外,您可以调用getActivity()来获取封闭活动(并将其用作上下文)。getApplicationContext()是您的活动如何获得比其本身更广泛的上下文。如果您需要在获得它的活动的生存期之后使用上下文(例如,将它传递到一个长期运行的后台线程),您可能需要这样做。
您可能不需要Toast中的应用程序上下文。但是,通过使用它,您的Toast应该能够保持可见,并且不会造成任何崩溃,即使您离开活动的起点。
https://stackoverflow.com/questions/11608709
复制相似问题