`

Android中使用Context?这几点要注意

 
阅读更多
通过阅读源码,我们会发现:
1、它描述的是一个应用程序环境的信息,即上下文。
2、该类是一个抽象(abstract class)类,Android提供了该抽象类的具体实现类ContextIml。
3、Activity类 、Service类 、Application类本质上都是Context子类,Broadcast reseive中系统会传递一个Context进来;
4、程序中Context实例个数 = Service个数 + Activity个数 + 1(Application对应的Context实例)
5、注意context的生命周期,比如Android知识梳理:消息机制之Handler(http://gqdy365.iteye.com/admin/blogs/2148925)中提的。
6、不同的context,其能力是不一样的,见下表(来自网络):


注: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()设置的上下文
  • 大小: 53.2 KB
0
0
分享到:
评论

相关推荐

    避免 Android中Context引起的内存泄露

    要避免这些内存泄露,有以下几点建议: 1. 避免在静态变量中存储Activity的引用,可以使用Application的Context代替,或者使用弱引用(WeakReference)存储Activity,这样在Activity被销毁后,弱引用不会阻止垃圾...

    深入解析Android App开发中Context的用法

    在理解了`Context`的创建和资源访问机制后,开发者可以更好地在Android应用中使用`Context`,避免滥用可能导致内存泄漏的问题。例如,不应在静态变量或非静态内部类中保存Activity的引用,因为这会间接持有`Context`...

    2011.09.23——— android sample之Notepad(context menu)

    标题中的“2011.09.23——— android sample之Notepad(context menu)”表明这是一个关于Android应用开发的示例项目,具体是针对Notepad应用的上下文菜单(Context Menu)功能的实践。在Android开发中,上下文菜单是...

    android 使用YModem协议固件升级

    在提供的压缩包中,`yodemLib`可能就是这样一个库,它实现了YModem协议,供开发者在Android应用中使用。集成这个库到Android Studio项目,通常需要以下步骤: 1. 将`yodemLib`作为模块导入:在Android Studio中,...

    android 中Handler 的几种写法

    通过理解以上知识点,开发者可以灵活地在Android应用中使用`Handler`进行线程间通信,高效地处理异步任务和UI更新。在实际开发中,结合`Handler`、`Looper`、`Thread`以及`Runnable`,可以构建出复杂而稳定的多线程...

    Android studio下的quartz工程

    在Android中使用Quartz需要注意以下几点: - **主线程限制**:由于Android对主线程的操作有严格限制,所有耗时操作应放在后台线程执行,避免阻塞UI。 - **生命周期管理**:确保在应用启动时启动调度器,并在退出时...

    android map的使用

    ### Android Map API 使用详解 ...通过以上介绍,你应该对如何在Android应用中使用Google Maps API有了初步了解。随着不断实践,你会更加熟练地掌握这些技术,并能够开发出功能更强大的地图应用。

    Android数据库安全解决方案,使用SQLCipher Demo

    4. **注意事项**:在使用SQLCipher时,需要注意以下几点: - 数据库升级时,必须保持加密密钥不变,否则会导致旧数据无法读取。 - 如果应用需要在不同设备间同步数据,需要确保所有设备使用相同的密钥。 - 加密会...

    android安卓通过url获取网络图片并显示在imageview中

    总结,通过URL获取网络图片并在Android应用中显示,主要涉及以下几个知识点: 1. 添加第三方库Glide及其依赖。 2. 配置AndroidManifest.xml以允许网络访问。 3. 使用Glide的API加载图片到ImageView。 4. 可选地,...

    Android开发-RecyclerView-AndroidStudio(三)瀑布流和几种布局

    在实际开发中,为了使RecyclerView具有良好的性能,还需注意以下几点: - 使用`DiffUtil`来计算数据集的变化,减少不必要的视图更新。 - 使用`ViewHolder`模式优化视图复用,避免频繁的findViewById操作。 - 通过...

    Android程序研发源码Android Spinner图文混排源码.rar

    在使用自定义Adapter的过程中,需要注意以下几点: 1. 数据结构:你需要有一个数据结构(如`Item`类)来存储每个条目的图片资源ID和文本。 2. 性能优化:由于`getView()`会被多次调用,为了提高性能,通常会在该方法...

    android progressbar 垂直布局

    在实际应用中,你可能需要考虑以下几点: - 尺寸调整:垂直进度条的宽度和高度可能需要根据设计进行定制。 - 颜色配置:进度条的颜色、背景颜色等可以通过自定义样式或属性进行调整。 - 进度动画:确保垂直进度条...

    Spring+Android框架

    这使得开发者可以在Android应用中使用@Autowired和其他Spring注解,减少手动配置,提高代码的可读性和可维护性。 3. **Android ContextWrapper**:Spring框架可以与Android的Context进行集成,使得开发者可以更容易...

    AndroidApp中使用SurfaceView制作多线程动画的实例讲解.docx

    ### Android App中使用SurfaceView制作多线程动画的实例讲解 #### SurfaceView的定义与应用场景 在Android开发中,为了确保应用的流畅性和响应性,通常需要将耗时操作(如网络请求)放在非UI线程中进行。然而,...

    Android中使用ListView实现汽泡短信聊天

    本文将详细探讨如何在Android中使用ListView来实现这种汽泡短信聊天的效果。 首先,我们需要创建一个自定义的ListView适配器(Adapter)。适配器是连接数据源和ListView的关键组件,它负责解析数据并将其转化为...

    Android自定义标签选择器TagView

    在Android开发中,自定义视图是提升用户体验和界面独特性的重要手段。本文将深入探讨如何创建一个自定义标签选择器TagView。TagView通常用于显示一组可选的标签,如分类、关键词或兴趣点,用户可以点击选择或取消...

    Android Wifi使用Demo

    下面将详细阐述这个"Android Wi-Fi使用Demo"中的关键知识点。 首先,我们要导入必要的Android权限。在`AndroidManifest.xml`文件中,你需要添加以下权限: ```xml <uses-permission android:name="android....

    Android亮屏和熄屏控制实例详解

    为了在应用程序中使用`PowerManager`,我们需要通过以下方式获取服务实例: ```java PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); ``` `Context.POWER_SERVICE`是一个常量,用于...

    Android中数据库常见操作实例分析

    本文将详细介绍Android中如何进行数据库的增删改查操作,并通过一个具体的实例来展示这一过程。 #### 二、数据库操作的基本概念 在开始具体实例之前,我们先了解几个重要的概念: - **SQLiteOpenHelper**:这是一...

Global site tag (gtag.js) - Google Analytics