Android中Context到底是什么以及用法
这是Stackoverflow上一位网友的回答:
原地址:http://stackoverflow.com/questions/3572463/what-is-context-in-android
As the name suggests, its the context of current state of the application/object. It lets newly created objects understand what has been going on. Typically you call it to get information regarding another part of your program (activity, package/application)
You can get the context by invoking
getApplicationContext()
,getContext()
,getBaseContext()
orthis
(when in the activity class).Typical uses of context:
Creating New objects: Creating new views, adapters, listeners:
1 TextView tv = new TextView(getContext()); 2 ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(), ...);Accessing Standard Common Resources: Services like LAYOUT_INFLATER_SERVICE, SharedPreferences:
1 context.getSystemService(LAYOUT_INFLATER_SERVICE) 2 getApplicationContext().getSharedPreferences(*name*, *mode*);Accessing Components Implicitly: Regarding content providers, broadcasts, intent
getApplicationContext().getContentResolver().query(uri, ...);
注:NO1 表示Application context的确可以开始一个Activity,但是它需要创建一个新的task。这可能会满足一些特定的需求,但是在你的应用中会创建一个不标准的回退栈(back stack),这通常是不推荐的或者不是是好的实践。
NO2 表示这是非法的,但是这个填充(inflation)的确可以完成,但是是使用所运行的系统默认的主题(theme),而不是你app定义的主题。
NO3 在Android4.2以上,如果Receiver是null的话(这是用来获取一个sticky broadcast的当前 值的),这是允许的
getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁
getBaseContext() 返回由构造函数指定或setBaseContext()设置的上下文