ApplicationContext或Activity Context是否适合Adapter?

问题描述 投票:4回答:3

我在我的项目中使用适配器进行ListView / RecycleView。但我想知道哪种上下文应该传递给适配器? ApplicationContext或Activity Context(它意味着活动上的这个)?据我所知,即使活动被杀死,系统也不会杀死适配器。所以我在这里有一些困惑:

  1. 如果我将活动上下文传递给适配器,那么适配器具有对活动的隐式引用。活动可以被杀死吗?
  2. 另一方面,我传递ApplicationContext。适配器还能存在多长时间?活动被杀后GC会收集吗?
  3. 在特定情况下我应该通过哪种上下文?

谢谢,

android listview android-recyclerview recycler-adapter
3个回答
5
投票

如果我将活动上下文传递给适配器,那么适配器具有对活动的隐式引用。活动可以被杀死吗?

更正它是一个显式引用,因为您手动传递它。所以基本上你的问题的答案可能是YES,因为持有适配器的人是活动本身,即使适配器持有对你的活动的引用,一旦活动完成,它们都将被垃圾收集。

除非您正在处理Threads,否则建议使用WeakReference,因为Thread可以比活动本身更长寿。

另一方面,我传递ApplicationContext。适配器还能存在多长时间?活动被杀后GC会收集吗?

在特定情况下我应该通过哪种上下文?

两者都可以工作,但应用程序上下文更安全。

据我所知,即使活动被杀死,系统也不会杀死适配器。

代码中的某些东西是不正确的,可能是你正在使用静态或线程。此处需要其他代码或您的分析器证明!


2
投票

ApplicationContext,因为如果你有超过1的话,你在销毁活动时应该通过GC清理它


2
投票

使用RecyclerView(你更喜欢ListView)时,你很可能会实现RecyclerView.Adapter。你必须覆盖onCreateViewHolder的方法之一,为您提供应该使用的上下文:

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // Use this context
    Context context = parent.getContext()
}
© www.soinside.com 2019 - 2024. All rights reserved.