在android中常常会遇到与context有关的内容

浅论一下context : 在语句 AlertDialog.Builder builder = new AlertDialog.Builder(this); 中,要求传递的 参数就是一个context,在这里我们传入的是this,那么这个this究竟指的是什么东东呢? 这里的this指的是Activity.this,是这个语句所在的Activity的this,是这个Activity 的上下文。网上有很多朋友在这里传入this.getApplicationContext(),这是不对的。 AlertDialog对象是依赖于一个View的,而View是和一个Activity对应的。 于是,这里涉及到一个生命周期的问题,this.getApplicationContext()取的是这个应 用程序的Context,Activity.this取的是这个Activity的Context,这两者的生命周期是不同 的,前者的生命周期是整个应用,后者的生命周期只是它所在的Activity。而AlertDialog应 该是属于一个Activity的,在Activity销毁的时候它也就销毁了,不会再存在;但是,如果传 入this.getApplicationContext(),就表示它的生命周期是整个应用程序,这显然超过了它 的生命周期了。 所以,在这里我们只能使用Activity的this。

new AlertDialog.Builder(getApplicationContext())时发生错误:

E/AndroidRuntime(5844): android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application

于是查了查:

getApplicationContext() 生命周期是整个应用,应用摧毁它才摧毁 Activity.this的context属于activity ,activity 摧毁他就摧毁

activity.this要返回一个activity,而getApplicationContext()就不一定返回一个activity

getApplicationContext() 返回应用的上下文,生命周期是整个应用,应用摧毁它才摧毁
Activity.this的context 返回当前activity的上下文,属于activity ,activity 摧毁他就摧毁

getBaseContext()返回由构造函数指定或setBaseContext()设置的上下文

更多相关文章

  1. Android(安卓)--- Activity生命周期
  2. Android四大基本组件介绍与生命周期
  3. Android之菜单总结
  4. [android]在上下文菜单的选中事件中获取列表选中的元素
  5. android api 中文 (74)—— AdapterView.AdapterContextMenuInfo
  6. Android中onContextItemSelected不响应
  7. Android—锁定横屏遇到的问题
  8. Android原生弹框的工具类AlertDialog,Dialog
  9. Android(安卓)软键盘相关辅助类KeyBoardUtils

随机推荐

  1. ConditionVariable的用法
  2. Android(安卓)Studio FFmpeg视频解码播放
  3. Android(安卓)4.4 Kitkat Phone工作流程
  4. android studio 混淆打包apk后volley无法
  5. Error:The SDK directory '/Users/AhmadM
  6. Android——本地服务基础(一)
  7. android开发相关资源
  8. Android(安卓)玩机之路(刷第三方recovery
  9. android display之VSync和线程处理关系
  10. ViewPager两大弊端优化方案