关于Context的困惑仍然存在

And*_*irl 5 android android-context

我是android新手...

我必须面对context课堂的最长时间,这有时让我困惑.在某些地方使用它context,某个地方,这是所谓的 getApplicationContext(),getContext(),getBaseContext().

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

K_A*_*nas 2

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

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

上下文的典型用途:

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

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

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

    context.getSystemService(LAYOUT_INFLATER_SERVICE)
    getApplicationContext().getSharedPreferences(名称,模式);

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

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

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

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

  1. 不要保留对上下文活动的长期引用(对活动的引用应与活动本身具有相同的生命周期)
  2. 尝试使用上下文应用程序而不是上下文活动
  3. 如果不控制其生命周期,请避免在活动中使用非静态内部类,使用静态内部类并对内部活动进行弱引用。这个问题的解决方案是使用一个带有外部类 WeakReference 的静态内部类,例如 ViewRoot 及其 W 内部类中所做的那样
  4. 垃圾收集器并不能保证内存泄漏