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。