Context的注意事项(笔记)

这篇博客是笔记记录,是写给我自己看的。大家想了解具体的,请点击张鸿洋的【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用于使用。

你可能感兴趣的:(Android)