5

我是安卓新手...

我不得不面对context有时让我感到困惑的课堂的最大时间。在它使用context的某个地方,它被 getApplicationContext(), getContext(),调用的某个地方getBaseContext()

我试图从这个网站http://www.developer.android.com/让我了解它 ,但很难理解。

4

1 回答 1

2

在 Android 上,上下文用于许多操作,但主要用于加载和访问资源。这就是所有小部件在其构造函数中接收 Context 参数的原因。在一个普通的Android应用中,你通常有两种Context,Activity和Application。它通常是开发人员传递给需要 Context 的类和方法的第一个:

您可以通过调用 getApplicationContext()、getContext()、getBaseContext() 或 this(在活动类中时)来获取上下文。

上下文的典型用法:

  1. 创建新对象:创建新视图、适配器、监听器:

    TextView tv = new TextView(getContext()); ListAdapter 适配器 = new SimpleCursorAdapter(getApplicationContext(), ...);

  2. 访问标准公共资源:LAYOUT_INFLATER_SERVICE、SharedPreferences 等服务:

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext().getSharedPreferences( name , mode );

  3. 隐式访问组件:关于内容提供者、广播、意图

    getApplicationContext().getContentResolver().query(uri, ...);

使用上下文时必须小心,因为维护它会导致内存泄漏

总之,要避免与上下文相关的内存泄漏,请记住以下几点:

  1. 不要保留对上下文活动的长期引用(对活动的引用应该与活动本身具有相同的生命周期)
  2. 尝试使用上下文应用程序而不是上下文活动
  3. 如果您不控制它们的生命周期,请避免在活动中使用非静态内部类,使用静态内部类并对内部活动进行弱引用。这个问题的解决方案是使用一个静态内部类和一个对外部类的弱引用,例如在 ViewRoot 和它的 W 内部类中所做的那样
  4. 垃圾收集器不是防止内存泄漏的保险
于 2012-05-08T11:25:02.773 回答