差异以及何时使用getApplication(),getApplicationContext(),getBaseContext()和someClass.this
古人已用三冬足,年少今开万卷余。这篇文章主要讲述差异以及何时使用getApplication(),getApplicationContext(),getBaseContext()和someClass.this相关的知识,希望能为你提供帮助。
我是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);
答案Toast和Intent都需要引用上下文。和getApplication,getApplicationContext,LoginActivity.this和getBaseContext一样,它们都提供了对上下文的引用。
现在令人困惑的是声明不同的上下文及其具体用法。为简单起见,您应该计算Android框架中可用的两种类型的上下文。
- 应用背景
- 活动背景
活动上下文附加到活动的生命周期,如果活动的
onDestroy()
被提升,则可以销毁活动上下文。如果要启动新活动,则必须在其Intent中使用活动的上下文,以便新的启动活动连接到当前活动(就活动堆栈而言)。但是,您也可以使用应用程序的上下文来启动新活动,但是您需要设置标志Intent.FLAG_ACTIVITY_NEW_TASK
以将其视为新任务。现在提到你的案例:
LoginActivity.this
虽然它引用了你自己的类,它扩展了Activity类,但基类(Activity)也扩展了Context类,因此它可以用来提供活动上下文。getApplication()
虽然引用了Application对象,但Application类扩展了Context类,因此它可以用来提供应用程序上下文。getApplicationContext()
提供应用程序上下文。getBaseContext()
提供活动背景。提示:每当你需要操作另一答案Waqas的答案非常明确和完整,但是我想进一步澄清使用Views
然后去Activity-Context,否则Application-Context就足够了。
this
与getBaseContext()
或getApplication()
与getApplicationContext()
之间的区别。 Activity
和Application
都不延伸Context
本身,但ContextWrapper
,这是一个“代表通过使用Context
的实现,只是将其所有调用委托给另一个Context
”。
getBaseContext()
获得的“真实”背景。因此,尽管
this
(对于Activity
)和getBaseContext()
都给出了活动背景,- (a)不要指同一个物体(
this != getBaseContext()
)和 - (b)通过
this
调用上下文的效率略低,因为调用通过了额外的间接级别。不过,我怀疑它是否有任何实际意义。
getApplication()
与getApplicationContext()
。另一答案
LoginActivity.this
上面的行是一个活动,它是一个上下文。这是在你创建一些AlertDialogs时使用的......在某些地方它必须使用Activity Context ...
getApplication()
同样,make文本方法需要Context和Application本身实现
Context
getApplicationContext()
这是最优选的方式,因为这个
Context
生活直到应用程序关闭。getBaseContext()
此上下文可用于窗口小部件和视图。
但是他们所有人都提供了一个Context对象而没有别的东西。
另一答案【差异以及何时使用getApplication(),getApplicationContext(),getBaseContext()和someClass.this】Class.this如果你的类扩展了Activity getapplication()使用了引用应用程序和应用程序扩展应用程序上下文getbasecontext()引用你的活动上下文上下文引用你的活动生命周期上下文applicationcontext引用你的应用程序生命周期
推荐阅读
- 在Push Notification Android上下载文件
- 通过Electron Framework掌握剪贴板的使用
- 如何使用Electron Framework在OS的文件浏览器中显示和聚焦文件(或文件夹)
- 如何在Electron Framework中连接到MySQL数据库
- 如何在Electron Framework中的渲染器进程内执行主进程的功能
- 如何在Electron Framework中提取.zip文件的内容(解压缩)
- 如何在Electron Framework中获取屏幕的宽度和高度
- 如何在Electron Framework中使用最小化,最大化和关闭控件创建自定义无框架窗口(无标题栏)
- 如何使用Electron Framework创建透明窗口