getContext() , getApplicationContext() , getBaseContext()的区别
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了getContext() , getApplicationContext() , getBaseContext()的区别相关的知识,希望对你有一定的参考价值。
-
1、View.getContext(): Returns the context the view is currently running in. Usually the currently active Activity.
- 当前Activity的上下文
-
2、Activity.getApplicationContext(): Returns the context for the entire application (the process all the Activities are running inside of). Use this instead of the current Activity context if you need a context tied to the lifecycle of the entire application, not just the current Activity.
- 应用程序的context
-
3、ContextWrapper.getBaseContext(): If you need access to a Context from within another context, you use a ContextWrapper. The Context referred to from inside that ContextWrapper is accessed via getBaseContext().
getBaseContext()
is the method ofContextWrapper
. AndContextWrapper
is, "Proxying implementation of Context that simply delegates all of its calls to another Context. Can be subclassed to modify behavior without changing the original Context."
1与2的生命周期不同, 前者的生命周期依赖于所在的Activity,后者的生命周期依赖于整个应用。所以new AlertDialog.Builder(getApplicationContext())时会发生错误,AletrDialog依赖的是一个View, 而View对应一个Activity,若传入getApplicationContext(),其生命周期是整个应用,当退出当前Activity的时候,就会报Unable to add window -- token null is not for an application的错误,应该传入当前Activity的Context。
以上是关于getContext() , getApplicationContext() , getBaseContext()的区别的主要内容,如果未能解决你的问题,请参考以下文章
SecurityContextHolder.getContext().getAuthentication() 跨请求返回 Null
为啥 Application.getContext() 返回 null? [复制]
SecurityContextHolder.getContext().getAuthentication() 返回 null