android中获取context的多种方法的区别(this,getbascontext(),getApplicationcontext())

转载 2015年11月21日 15:39:43

http://blog.csdn.net/cazicaquw/article/details/7565350


本文转自:http://www.eoeandroid.com/thread-171104-1-1.html

原文转自:http://stackoverflow.com/questions/1026973/android-whats-the-difference-between-the-various-methods-to-get-a-context


In various bits of Android code I've seen: 
在大量的android代码中,我看到如下的写法:

public class MyActivity extends Activity { 
    public void method() { 
       mContext = this;    // since Activity extends Context 
       mContext = getApplicationContext(); 
       mContext = getBaseContext(); 
    } 
}

However I can't find any decent explanation of which is preferable, and under what circumstances which should be used.
不过,我不能找到任何像样的解释:那种写法是最好的,在哪种情况应使用哪种写法。

Pointers to documentation on this, and guidance about what might break if the wrong one is chosen, would be much appreciated.
如果你有关于这方面的文章的地址,和关于如果选择错误的写法会产生的错误的指导,将不胜感激。 

I agree that documentation is sparse when it comes to Contexts in Android, but you can piece together a few facts from various sources.
我承认,涉及android中Contexts的文章凤毛麟角,但是,我们还是可以从各种来源中拼凑出东西的。 

This blog post on the official Google Android developers blog was written mostly to help address memory leaks, but provides some good information about contexts as well:
这个谷歌官方的Android开发者写,主要是为了帮助解决内存泄漏,的博客文章,同时也给contexts提供了一些良好的信息:

In a regular Android application, you usually have two kinds of Context, Activity and Application.
在一个普通的Android应用程序中,你通常有两种Context,Activity和Application。

Reading the article a little bit further tells about the difference between to the two and why you might want to consider using the application Context (Activity.getApplicaitonContext()) rather than using the Activity context ("this"). Basically the Application context is associated with the Applicaiton and will always be the same throughout the life cycle of you app, where as the Activity context is associated with the activity and could possible be destroyed many times as the activity is destroyed during screen orientation changes and such.
如果再深入读下这篇文章,它告诉了我们这两种Context的不同,并且为什么你会考虑使用应用程序Context(Activity.getApplicaitonContext())而不是使用活动Context(即"this")。基本上来说呢,应用程序Context是和应用程序关联的,并且在程序的生命周期内,总是一样的。但是,活动Context是关联在某个活动上的,随着Activity的销毁(比如横竖屏切换等情况),这个Context也会被销毁N多次。

I couldn't find really anything about when to use getBaseContext() other than / from one /(a for a) liner from Dianne Hackborn, one of the Google engineers working on the Android SDK:
我真的没有找到任何关于使用 getBaseContext()的东西,除了Dianne Hackborn(一位编写Android SDK的谷歌工程师)的文章中的一句话:

Don't use getBaseContext(), just use the Context you have. 
不要使用getBaseContext(),只使用你有的Context。

That was from a post on the android-developers newsgroup, you may want to consider asking your question there as well because a handful of the people working on Android actual monitor that newsgroup and answer questions.
那是来自 android-developers 新闻组的一篇邮件。你也可以考虑在那里问你的问题,因为确实有一大帮搞Android的人在管理这个小组,并且回答问题。

So overall it seems preferable to use the global application context when possible.
所以,总体来说,似乎最好在可能的情况下使用全局应用程序Context。

I got bad window token errors when using application context to Progress Dialog. So i used activity context instead. 
我使用应用程序Context给进度条对话框的时候,出现了“window token errors”的错误。所以,我使用了活动Context,而不是应用程序Context。

PS:
Pointers to documentation on this, and guidance about what might break if the wrong one is chosen, would be much appreciated.
如果你有关于这方面的文章的地址,和关于如果选择错误的写法会产生的错误的指导,将不胜感激

绝对让你理解Android中的Context

文章转自:阿拉灯神灯CSDN博客 http://blog.csdn.net/nugongahou110/article/details/46972237 这个问题是St...
  • chi1002
  • chi1002
  • 2016年04月26日 10:53
  • 1476

Android获取LayoutInflater对象的方法总结

在写Android程序时,有时候会编写自定义的View,使用Inflater对象来将布局文件解析成一个View。本文主要目的是总结获取LayoutInflater对象的方法。 1、若能获取cont...
  • bigconvience
  • bigconvience
  • 2014年05月22日 14:28
  • 15896

Toast.makeText(消息模式)的几种用法

详细说来,一共五种用用法。 默认的显示 自定义位置显示(值改变位置) 带图片显示(能够显示一个图标) 完全自定义显示 在其他线程中调用显示该方法的一般用法: Toast toast = T...
  • qq_28301007
  • qq_28301007
  • 2016年08月27日 15:21
  • 6246

android中获取context的多种方法的区别(this,getbascontext(),getApplicationcontext())

本文转自:http://www.eoeandroid.com/thread-171104-1-1.html 原文转自:http://stackoverflow.com/questions/10269...
  • CAZICAQUW
  • CAZICAQUW
  • 2012年05月14日 16:08
  • 17366

Android中的context使用(getApplicationContext和Activity.this的区别和使用)

1、首先两者的区别:   1、getApplicationContext()返回的是应用的上下文,隶属于整个应用,应用结束时才摧毁。   2、Activity.this返回到是Activity的上...
  • hellohhj
  • hellohhj
  • 2015年03月24日 09:45
  • 2304

this 和 getApplicationContext Context的区别

转自:http://stackoverflow.com/questions/1026973/android-whats-the-difference-between-the-various-metho...
  • BIGSHOTZHANG
  • BIGSHOTZHANG
  • 2012年07月04日 11:28
  • 1025

Android Context与GetApplicationContext的区别及使用

转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/40481055,本文出自:【张鸿洋的博客】 本文大多数内容翻译自:http:...
  • u014722744
  • u014722744
  • 2015年01月30日 17:21
  • 4869

熟悉Android Context与GetApplicationContext的区别及使用,能够解决内存泄漏问题

1、Context概念 其实一直想写一篇关于Context的文章,但是又怕技术不如而误人子弟,于是参考了些资料,今天准备整理下写出来,如有不足,请指出,参考资料会在醒目地方标明。 Context,...
  • lixuce1234
  • lixuce1234
  • 2017年03月14日 11:26
  • 169

谈谈Android 中this、 getApplicationContext()、getApplication()等等之间的区别

this:代表当前,在Activity当中就是代表当前的Activity,换句话说就是Activity.this在Activity当中可以缩写为this.(使用this, 说明当前类是context的...
  • StruggleOldBoy
  • StruggleOldBoy
  • 2016年07月05日 11:57
  • 165

android中getApplicationContext()、this、getApplication()、getBaseContext之间的区别

getApplicationContext():生命周期是整个应用,应用摧毁,它才摧毁。 this:代表当前,在Activity当中就是代表当前的Activity,换句话说就是Activity.thi...
  • qq645139778
  • qq645139778
  • 2015年06月19日 00:01
  • 244
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:android中获取context的多种方法的区别(this,getbascontext(),getApplicationcontext())
举报原因:
原因补充:

(最多只允许输入30个字)