Phe*_*ix7 116 android this toast android-intent android-context
我是新来的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();
Run Code Online (Sandbox Code Playgroud)
与意图相同:
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);
Run Code Online (Sandbox Code Playgroud)
waq*_*lam 206
Toast和Intent都需要引用上下文.和getApplication,getApplicationContext,LoginActivity.this和getBaseContext一样,它们都提供了对上下文的引用.
现在令人困惑的是声明不同的上下文及其具体用法.为简单起见,您应该计算Android框架中可用的两种类型的上下文.
应用程序上下文附加到应用程序的生命周期中,并且在应用程序的整个生命周期中始终保持相同.因此,如果您正在使用Toast,则可以使用应用程序上下文甚至活动上下文(两者),因为可以从应用程序中的任何位置引发Toast,并且不会将其附加到窗口.
活动上下文附加到活动的生命周期,如果活动onDestroy()被提升,则可以销毁活动上下文.如果要启动新活动,则必须在其Intent中使用活动的上下文,以便新的启动活动连接到当前活动(就活动堆栈而言).但是,您也可以使用应用程序的上下文来启动新活动,但是您需要Intent.FLAG_ACTIVITY_NEW_TASK在意图中设置标记以将其视为新任务.
现在提到你的案例:
LoginActivity.this 虽然它引用了您自己的类,它扩展了Activity类,但基类(Activity)也扩展了Context类,因此它可以用来提供活动上下文.
getApplication() 尽管它引用了Application对象,但Application类扩展了Context类,因此它可以用于提供应用程序上下文.
getApplicationContext() 提供应用背景.
getBaseContext() 提供活动背景.
提示:每当你需要操作
Views然后去 Activity-Context,否则Application-Context就足够了.
小智 25
Waqas的答案非常明确和完整,但我想进一步澄清使用thisvs. getBaseContext()或getApplication()vs. 之间的区别getApplicationContext().双方Activity并Application延长不是Context本身,而是ContextWrapper,这是一个
"代理实现
Context它只是将所有调用委托给另一个Context".
这种"真实"的背景是你通过使用得到的getBaseContext().
因此,虽然this(for Activity)和getBaseContext()两者都给出了活动背景,但它们
this != getBaseContext())和this效率稍差,因为呼叫经过了额外的间接.不过,我怀疑它是否有任何实际意义.同样的逻辑也适用于getApplication()对getApplicationContext().
LoginActivity.this
Run Code Online (Sandbox Code Playgroud)
上面的行是一个活动,它是一个上下文.这是在你创建一些AlertDialogs时使用的......在某些地方它必须使用Activity Context ...
getApplication()
Run Code Online (Sandbox Code Playgroud)
同样,make文本方法需要Context和Application本身实现 Context
getApplicationContext()
Run Code Online (Sandbox Code Playgroud)
这是最优选的方式,因为它一直Context存在,直到应用程序关闭.
getBaseContext()
Run Code Online (Sandbox Code Playgroud)
此上下文可用于窗口小部件和视图.
但是他们所有人都提供了一个Context对象而没有别的东西.
| 归档时间: |
|
| 查看次数: |
52803 次 |
| 最近记录: |