ApplicationContext或Activity Context是否适合Adapter()

满堂花醉三千客,一剑霜寒十四洲。这篇文章主要讲述ApplicationContext或Activity Context是否适合Adapter?相关的知识,希望能为你提供帮助。
我在我的项目中使用适配器进行ListView / RecycleView。但我想知道哪种上下文应该传递给适配器? ApplicationContext或Activity Context(它意味着活动上的这个)?据我所知,即使活动被杀死,系统也不会杀死适配器。所以我在这里有一些困惑:

  1. 如果我将活动上下文传递给适配器,那么适配器具有对活动的隐式引用。活动可以被杀死吗?
  2. 另一方面,我传递ApplicationContext。适配器还能存在多长时间?活动被杀后GC会收集吗?
  3. 在特定情况下我应该通过哪种上下文?
谢谢,
答案
如果我将活动上下文传递给适配器,那么适配器具有对活动的隐式引用。活动可以被杀死吗?
更正它是一个显式引用,因为您手动传递它。所以基本上你的问题的答案可能是YES,因为持有适配器的人是活动本身,即使适配器持有对你的活动的引用,一旦活动完成,它们都将被垃圾收集。
除非您正在处理Threads,否则建议使用WeakReference,因为Thread可以比活动本身更长寿。
另一方面,我传递ApplicationContext。适配器还能存在多长时间?活动被杀后GC会收集吗?

在特定情况下我应该通过哪种上下文?
两者都可以工作,但应用程序上下文更安全。
据我所知,即使活动被杀死,系统也不会杀死适配器。
代码中的某些东西是不正确的,可能是你正在使用静态或线程。此处需要其他代码或您的分析器证明!
另一答案ApplicationContext,因为如果你有超过1的话,你在销毁活动时应该通过GC清理它
另一答案【ApplicationContext或Activity Context是否适合Adapter()】使用RecyclerView(你更喜欢ListView)时,你很可能会实现RecyclerView.Adapter。你必须覆盖onCreateViewHolder的方法之一,为您提供应该使用的上下文:
@Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { // Use this context Context context = parent.getContext() }


    推荐阅读