ApplicationContext或Activity Context是否适合Adapter?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ApplicationContext或Activity Context是否适合Adapter?相关的知识,希望对你有一定的参考价值。
我在我的项目中使用适配器进行ListView / RecycleView。但我想知道哪种上下文应该传递给适配器? ApplicationContext或Activity Context(它意味着活动上的这个)?据我所知,即使活动被杀死,系统也不会杀死适配器。所以我在这里有一些困惑:
- 如果我将活动上下文传递给适配器,那么适配器具有对活动的隐式引用。活动可以被杀死吗?
- 另一方面,我传递ApplicationContext。适配器还能存在多长时间?活动被杀后GC会收集吗?
- 在特定情况下我应该通过哪种上下文?
谢谢,
如果我将活动上下文传递给适配器,那么适配器具有对活动的隐式引用。活动可以被杀死吗?
更正它是一个显式引用,因为您手动传递它。所以基本上你的问题的答案可能是YES,因为持有适配器的人是活动本身,即使适配器持有对你的活动的引用,一旦活动完成,它们都将被垃圾收集。
除非您正在处理Threads,否则建议使用WeakReference
,因为Thread可以比活动本身更长寿。
另一方面,我传递ApplicationContext。适配器还能存在多长时间?活动被杀后GC会收集吗?
是
在特定情况下我应该通过哪种上下文?
两者都可以工作,但应用程序上下文更安全。
据我所知,即使活动被杀死,系统也不会杀死适配器。
代码中的某些东西是不正确的,可能是你正在使用静态或线程。此处需要其他代码或您的分析器证明!
ApplicationContext,因为如果你有超过1的话,你在销毁活动时应该通过GC清理它
使用RecyclerView(你更喜欢ListView)时,你很可能会实现RecyclerView.Adapter
。你必须覆盖onCreateViewHolder
的方法之一,为您提供应该使用的上下文:
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// Use this context
Context context = parent.getContext()
}
以上是关于ApplicationContext或Activity Context是否适合Adapter?的主要内容,如果未能解决你的问题,请参考以下文章
ApplicationContext或Activity Context是否适合Adapter?
Activiti 流程部署方式 activi 动态部署(高级源代码篇)
Ambiguous method call. Both findViewById (int) in AppCompatActivity and findViewById (int) in Activi
applicationContext.xml 存放到工程下resources文件 而不是放在src 或webroot的话要怎么配置 web.xml文件