Android中的Context

309 阅读1分钟

1、Context的基本概念

Context字面意思上下文,或者叫做场景,我们在加载资源、启动一个新的Activity、获取系统服务、获取内部文件(夹)路径、创建View操作时等都需要Context的参与。

2、Context的泄漏问题

因为某些类引用了需要回收的类的Context,导致需要回收的类无法回收。例如工具类中传入Activity的Context,当Activity退出时,因为工具类持有Activity的Context导致Activity无法回收引起内存泄漏。原则上是凡是跟UI相关的,都应该使用Activity做为Context来处理;其他的一些操作,Service,Activity,Application等实例都可以。

3、引用资源时是否一定要用Context

一般情况下引用drawable、string、color等资源文件时必然需要context,如下context.getRescource().getDrawable(...),但其实我们在引用一些系统资源是不需要context的,举例我们编写dp2px工具类常规写法:

public static float dp2px(Context context, float value) {
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, context.getResources().getDisplayMetrics());
}

这里需要传入一个Context,但是其实获取系统级的 DisplayMetrics参数是不需要上下文的,我们改造上面的写法:

public static float dp2px(float value) {
    return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, value, Resources.getSystem().getDisplayMetrics());
}

这样写也会避免Context可能内存泄漏的问题.

--个人学习笔记--