gpt4 book ai didi

android - 仍然对上下文感到困惑

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:07:09 25 4
gpt4 key购买 nike

我是安卓新手...

我不得不面对 context 类的最长时间,这有时让我感到困惑。在某些地方它使用context,它在某处被 getApplicationContext()getContext()getBaseContext() 调用。

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

最佳答案

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

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

上下文的典型用途:

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

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

  2. 访问标准公共(public)资源:服务如LAYOUT_INFLATER_SERVICE,SharedPreferences:

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

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

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

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

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

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

关于android - 仍然对上下文感到困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10497244/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com