关于Context的困惑仍然存在

时间:2012-05-08 10:55:21

标签: android android-context

我是android的新手......

我必须面对context课程的最长时间,这有时让我感到困惑。 在某些地方,它使用context, 它由getApplicationContext()getContext()getBaseContext()调用。

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

1 个答案:

答案 0 :(得分:2)

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

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

上下文的典型用法:

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

    TextView tv = new TextView(getContext()); ListAdapter adapter = new SimpleCursorAdapter(getApplicationContext(),...);

  2. 访问标准公共资源:像 LAYOUT_INFLATER_SERVICE,SharedPreferences:

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

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

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

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

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

    1. 不要长期保持对上下文活动的引用(引用 活动应该与活动具有相同的生命周期 本身)
    2. 尝试使用context-application而不是context-activity
    3. 如果您不控制,请避免在活动中使用非静态内部类 他们的生命周期,使用静态内部类并做出弱引用 到里面的活动。这个问题的解决方案是使用a 静态内部类与外部类的WeakReference一样,完成后 在ViewRoot及其W内部类中,例如
    4. 垃圾收集器不是防止内存泄漏的保险