Android中Activity.this,getApplicationContext(),getBaseContext()和this详解
转自:http://android.tgbus.com/Android/tutorial/201103/346236.shtml
在使用Android上下文参数的时候经常分不清Activity.this(这里的Activity代指Activity类,也就是你需要使用context参数的那个Activity,例如:MainActivity),getApplicationContext()和getBaseContext(),经过谷歌查询,终于算是有些明白了,这里记下来,备忘,也希望能帮助更多的人。
首先说一下生命周期上的区别。
- getApplicationContext()返回的是你的整个Application的context,生命周期是整个Application,Application销毁后,它才销毁。
- Activity.this的context属于Activity,生命周期与Activity相同,随着当前的Activity.this消亡而消亡。
- getBaseContext()返回由构造函数指定或者setBaseContext()设置的上下文(谷歌工程师不建议使用)。
- this放在哪里边就是谁的指针,如果在Activity中就是Activity,这时等同于Activity.this;如果放在OnCliclListener()中就是OnClickListener()。
接下来说说怎么使用getApplicationContext()和Activity.this。
根据你的控件的生命周期决定传Activity.this还是getApplicationContext(),如果你的控件的生命周期是整个应用,就传送getApplicationContext(),如果是当前的Activity,就传送Activity.this。
以AlertDialog为例,AlertDialog的对象是依赖于View的,View是和具体的Activity相关的,如果Activity消亡了,则View也不存在,所以需要传入Activity.this而不是getApplicationContext()。
综上所述:最简单的方法是根据控件的生命周期决定传什么参数。
Android中Activity.this,getApplicationContext(),getBaseContext()和this详解的更多相关文章
- Android中内容观察者的使用---- ContentObserver类详解 (转)
前言: 工作中,需要开启一个线程大量的查询某个数据库值发送了变化,导致的开销很大,后来在老大的指点下,利用了 ContentObserver完美的解决了该问题,感到很兴奋,做完之后自己也对Conten ...
- Android中的Handler的机制与用法详解
概述: 很多android初学者对android 中的handler不是很明白,其实Google参考了Windows的消息处理机制, 在Android系统中实现了一套类似的消息处理机制.在下面介绍ha ...
- 转:Android中的Handler的机制与用法详解
注:Message类的用法: message的几个参数都可以携带数据,其中arg1与arg2可以携带int类型,what是用户自定义的int型,这样接受者可以了解这个消息的信息. 说明:使用Messa ...
- Android中内容观察者的使用---- ContentObserver类详解
详解:http://blog.csdn.net/qinjuning/article/details/7047607
- Android 调用图库选择图片实现和参数详解
//选择图片,调用图库 bt4.setOnClickListener(new OnClickListener() { @Override public void o ...
- android中activity.this跟getApplicationContext的区别
转载: http://www.myexception.cn/android/1968332.html android中activity.this和getApplicationContext的区别 在a ...
- Android中Activity的启动模式
简介 Android中的活动启动方式分为4种:standard, singleTop, singleTask, singleInstance.可以在AndroidManifest.xml中通过给< ...
- Android中Activity启动模式详解
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. An ...
- Android进阶笔记08:Android 中Activity、Window和View之间的关系
1. Android 中Activity.Window和View之间的关系(比喻): Activity像一个工匠(控制单元),Window像窗户(承载模型),View像窗花(显示视图) LayoutI ...
随机推荐
- 解决react-router4在browserhistory路由下的nginx的白屏或者404问题
使用react-router,官方推荐用browserhistory,美观简洁.但是nginx服务器端的配置也让人头疼. 首先看官方举例的方法: server { location / { try_f ...
- MVC5中使用Log4Net
最早搜到的是这篇: http://www.codeproject.com/Articles/823247/How-to-use-Apache-log-net-library-with-ASP-NET- ...
- spring 运行时属性值注入
继续spring学习,今天介绍两种外部属性值注入的方式.当你需要读取配置信息时,可以快速读取. 开始之前先创建属性文件site.properties,放在classpath下面 #数据库配置 ### ...
- vue子组件向父组件传值
vue2.0中通过$emit事件在子组件中自定义事件,通过操作子组件中的事件,向父组件传递参数: 首先写一个叫做parentComp.vue的父组件: <template> <div ...
- 【阿里聚安全·安全周刊】科学家警告外星恶意代码|新方法任意解锁iPhone
本周的七个关键词: 外星恶意代码 丨 任意解锁iPhone 丨 安卓9.0 丨 黑客攻击医疗设备 丨 仙女座僵尸网络 丨 苹果联合创始人被骗比特币 丨JavaScript -1- [恶意代码] ...
- uva10976
数学题. 1. 因为 1/k = 1/x +1/y 所以 1/k > 1/y 那么 y > k 2 . 因为 x >= y 所以 1/k - 1/y <= 1/y 那么 y & ...
- HDU - 1407 打表
思路:预处理10000以内所有数的三平方和即可. AC代码 #include <cstdio> #include <cmath> #include <algorithm& ...
- Java Enum总结
枚举类型 枚举类型是Java5新增的特性之一,枚举是一种特殊类型的类,其枚举的每一个值 都是该枚举类的一个实例.枚举类型是作为Java语言的一部分,是完全类型安全的, 编译器会帮助我们检查枚举类型的正 ...
- CompletableFuture CompletableFuture.supplyAsync 异常处理
CompletableFuture 异常处理completeExceptionally可以把异常抛到主线程 /** * User: laizhenwei * Date: 2018-01-30 Time ...
- eclipse web and java ee development
1.打开Eclipse ->help ->install new software 2.Work with:http://download.eclipse.org/releases/gan ...