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