`

Android的context 和 getApplicationContext()

阅读更多

在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()设置的上下文

分享到:
评论

相关推荐

    Android Context与GetApplicationContext的区别及使用1

    【Android Context 与 GetApplicationContext 的区别及使用】 在Android开发中,Context是一个至关重要的概念,它扮演着应用程序组件与系统服务交互的关键角色。Context可以理解为应用运行时的上下文环境,提供了对...

    Android Context使用例子.

    `Context`的理解和正确使用对于编写健壮的Android应用至关重要。下面将详细介绍`Context`的基本概念、类型、常用方法以及在实际开发中的应用。 一、`Context`的基本概念 `Context`是Android框架中的一个基础类,它...

    谈谈Android里的Context的使用

    大家好,今天给大家分享一下Android... aContext = getApplicationContext(); } /**获取Context. * @return */ public static Context getContext(){ return aContext; } } 第5步:运行上述工程效果如下:

    Android的context使用

    本文将详细介绍Android中Context的使用,并通过一个简单的Demo展示如何在工具类和View中灵活地获取和使用Context。 首先,我们要明白Context的三种主要类型:Application、Activity和Service。它们都是Context的...

    012_android 之消息提示toast 和Context

    在Android开发中,消息提示和上下文(Context)是两个非常基础且重要的概念。本教程“012_android 之消息提示toast 和Context”将深入讲解这两个关键知识点,帮助开发者更好地理解和运用它们。 首先,我们来谈谈...

    android中用getApplicationContext()会不会避免某些内存泄漏问题?

    RT,在android开发中,如果在使用context的地方全部用getApplicationContext()会不会避免某些内存泄漏问题? 首先,Activity的Context和Application的Context肯定不是一个东西,一个是当前活动的 Context,它的生命...

    在项目的任何地方轻松获取Context的demo

    总结起来,理解和合理利用Context对于提升Android应用的性能和稳定性至关重要。在项目中,我们应该尽量使用Application Context来处理非UI相关的任务,减少对Activity Context的依赖,同时利用依赖注入和现代开发...

    反射获取Context的实例

    在Android开发中,反射是一种强大的编程技术,它允许我们在运行时检查和操作类、接口、字段和方法。本文将深入探讨如何通过反射获取`Context`的实例,并展示如何利用反射实现一个集成`Toast`的工具类。这在某些场景...

    Android全局获取Context实例详解

    Context是Android中一个非常重要的概念,它提供了访问应用程序级别的资源和服务的能力。获取Context实例是非常必要的,因为在很多情况下,我们需要使用Context来实现特定的功能,例如弹出Toast、启动活动、发送广播...

    Android编程获取全局Context的方法

    在Android编程中,Context是一个非常重要的概念,它代表了应用程序的环境或上下文,提供了访问系统服务、资源和应用程序特定信息的入口。然而,在大型应用中,由于Activity、Service等组件生命周期的不同,直接通过...

    android demo,BaseAdapter传递context的应用

    这个`Context`可以是Activity或Fragment的`getApplicationContext()`,但推荐使用前者,因为Activity的`Context`更稳定,且生命周期更长。 ```java public class CustomAdapter extends BaseAdapter { private ...

    Android 中Context的使用方法详解

    Context 是 Android 开发中一个非常重要的概念,它提供了关于应用环境全局信息的接口,允许获取以应用为特征的资源和类型,同时启动应用级的操作。正确使用 Context 是 Android 开发中非常重要的一步。

    谈谈Android里的Context的使用实例

    本文将详细讲解如何在Android应用中正确使用和理解Context。 首先,让我们明确Context的几种类型: 1. **Activity Context**:通常由Activity类提供,它与用户界面直接关联。Activity Context可以用来启动新的...

    Android 判断网络是否可用 & 获取IP地址 & 获取以太网口MAC地址

    判断网络是否可用: 注意!是判断网络是否可用,但网络可用不代表一定能上外网的! public static boolean ... .getApplicationContext().getSystemService( Context.CONNECTIVITY_SERVICE); if (m

    安卓Android Context类实例详解

    在Android开发中,Context类是应用的核心组成部分,它提供了与应用程序环境交互的接口。Context类在许多场景下被使用,包括创建UI元素、访问系统服务、读取资源以及执行其他与应用程序上下文相关的操作。本篇文章将...

    context 在ADROID中的作用

    在Android开发中,`Context`是一个至关重要的概念,它提供了应用程序运行环境的接口,是连接应用程序组件和系统服务的关键。`Context`字面上可以理解为上下文,它封装了应用程序运行时所需的各种环境信息,包括应用...

    android管理应用程序相关代码及资源路径

    Context context = getApplicationContext(); File cacheDir = context.getCacheDir(); deleteFilesInDir(cacheDir); public static void deleteFilesInDir(File dir) { if (dir != null && dir.isDirectory()) { ...

    Android清除缓存功能

    在Android应用开发中,...总之,实现Android清除缓存功能不仅涉及到内存、磁盘和网络缓存的清理,还涉及到如何优雅地集成到应用中。通过上述方法,你可以构建一个全面的缓存清理方案,确保应用始终处于高效运行状态。

    android检查内存泄露

    android检查内存泄露和用法 <!--==============================================================================--> android:name="com.squareup.leakcanary.internal.HeapAnalyzerService" android:enabled...

Global site tag (gtag.js) - Google Analytics