我是新来的Android和我试图理解之间的区别getApplication()
getApplicationContext(
getBaseContext()
getContext()
和someClass.this
特别是当使用这些方法在下面的代码行:
当我启动敬酒的是这和在何种情况下,以我使用它们之间的区别?
Toast.makeText(LoginActivity.this, "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplication(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getApplicationContext(), "LogIn successful", Toast.LENGTH_SHORT).show();
Toast.makeText(getBaseContext(), "LogIn successful", Toast.LENGTH_SHORT).show();
同样与意图:
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
Intent intent = new Intent(MenuPagina., LoginActivity.class);
Intent intent = new Intent(getBaseContext(), LoginActivity.class);
Intent intent = new Intent(getApplication(), LoginActivity.class);
面包和意图 ,都需要参考上下文 。 和getApplication,getApplicationContext,LoginActivity.this和getBaseContext,他们都提供参照上下文。
现在的东西混淆了不同的背景和他们的特定用途的声明。 为了使事情变得简单,你应该算两种类型的上下文的Android框架可用。
- 应用上下文
- 活动上下文
应用程序上下文连接到应用程序的生命周期,将来永远是整个应用程序的生命一样。 所以,如果你使用的是吐司 ,您可以使用应用程序上下文,甚至活动情境(两者)因为举杯可以从任何地方在您的应用程序提出了与和不附加到一个窗口。
Activity上下文的连接到活动的生命周期,如果活动的可破坏onDestroy()
升高。 如果你想推出一个新的活动,你必须要使用活动的背景下,它打算让新启动的活动连接到当前的活动(在活动堆栈中的条款)。 但是,你可以使用应用程序的情况下也推出了新的活动,但随后你需要设置标志Intent.FLAG_ACTIVITY_NEW_TASK
在意图把它作为一个新的任务。
现在参照您的情况:
LoginActivity.this
虽然它指的是你自己的类延伸活动类,但基类(活动)也延伸Context类,因此它可以用来提供活动情境。
getApplication()
尽管其参照应用的对象,但在应用程序类扩展Context类,所以它可以被用于提供应用程序上下文。
getApplicationContext()
提供应用程序上下文。
getBaseContext()
提供的活动环境。
温馨提示:当你需要操作Views
,然后去活动-语境 ,否则应用上下文就足够了。
通过Waqas答案是非常明确的,完整的,但是我想进一步明确两者的区别: this
与getBaseContext()
或getApplication()
与getApplicationContext()
两个Activity
和Application
延伸不Context
本身,而是ContextWrapper
,这是一个
“代理执行的Context
,仅仅代表其全部转移到另一个Context
”。
这种“真实”的背景下是通过使用得到什么getBaseContext()
因此,尽管this
(对Activity
)和getBaseContext()
都给予了活动方面,他们
- (一)不指向同一个对象(
this != getBaseContext()
和 - (b)通过调用上下文
this
是略少效率,因为呼叫经过额外的间接水平。 我怀疑它使任何实用性差,虽然。
同样的逻辑适用于getApplication()
与getApplicationContext()
LoginActivity.this
上面的线是一种活动是obeveously上下文..当你创建一些AlertDialogs这是用来......在您使用活动上下文一些地方的强制...
getApplication()
同样在这里的使文本方法需要语境和应用本身实现Context
getApplicationContext()
这是最优选的方式,因为这种Context
生活,直到应用程序关闭。
getBaseContext()
这个语境是提供给小部件和视图..
但他们都给出了一个Context对象,没有别的..
如果你的类扩展活动getapplication()用来指应用程序和应用程序扩展应用程序上下文getbasecontext()是指您的活动情境语境是指您的活动生命周期背景下的ApplicationContext是指你的应用程序生命周期中使用Class.this
文章来源: difference and when to use getApplication(), getApplicationContext(), getBaseContext() and someClass.this