Context的注意事项(笔记)

本文详细介绍了 Android 中 Context 的概念及应用场景,对比了 Activity 和 Application 的 Context 差异,并提供了避免内存泄漏的最佳实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇博客是笔记记录,是写给我自己看的。大家想了解具体的,请点击张鸿洋的【Android Context 上下文 你必须知道的一切】
Context是一个抽象类,Activity、Service、Application都是Context的子类。项目中Activity的Context和Application的Context是不一样的,不能随意使用。

  • Activity的Context的生命周期和Activity是一样的,Activity销毁后Context也销毁
  • 同理,Application的Context和Application一致。

所以引用时需要正确使用,避免内存泄漏。下面总结一下,容易出错的地方:

  1. startActivity使用Activity的Context,因为使用Application的Context会创建一个新的task。
  2. 单例中的getInstance(),如果我们传一个Activity的Context,只要项目或者,Activity就没有办法进行回收。建议下面这样使用:
  3. 创建activity或者图片或者组件的创建,应该使用Activity的context,不然因为Application是全局的导致这些资源无法及时得到释放,导致内存泄露。
public static synchronized CustomManager getInstance(Context context)  
    {  
        if (sInstance == null)  
        {  
            sInstance = new CustomManager(context.getApplicationContext());  
        }  
        return sInstance;  
    }  

Context应用场景

这里写图片描述

NO上添加了一些数字,其实这些从能力上来说是YES,实际不推荐使用。下面一个一个解释:
数字1:启动Activity在这些类中是可以的,但是需要创建一个新的task。一般情况不推荐。
数字2:在这些类中去layout inflate是合法的,但是会使用系统默认的主题样式,如果你自定义了某些样式可能不会被使用。
数字3:在receiver为null时允许,在4.2或以上的版本中,用于获取黏性广播的当前值。(可以无视)
注:ContentProvider、BroadcastReceiver之所以在上述表格中,是因为在其内部方法中都有一个context用于使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值