ApplicationContext或Activity Context是否适合Adapter?

时间:2018-01-03 03:22:17

标签: android listview android-recyclerview recycler-adapter

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

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

3 个答案:

答案 0 :(得分:5)

  

如果我将Activity Context传递给适配器,那么适配器就有了   隐含的活动参考。活动可以被杀死吗?

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

除非您正在处理线程,否则建议使用WeakReference,因为线程的活动时间可能比活动本身长。

  

另一方面,我传递ApplicationContext。多久了   适配器仍然存在?是否在活动结束后由GC收集   杀?

YES

  

在特定情况下我应该传递哪种背景?

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

  

据我所知,系统即使没有杀死适配器   被杀的活动。

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

答案 1 :(得分:2)

ApplicationContext,因为如果你有超过1个

,你在销毁活动时应该被GC清理

答案 2 :(得分:2)

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

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    // Use this context
    Context context = parent.getContext()
}