最近在上下文Context的两个子类中不是很明白,为什么要用ContextImpl类来实现Context,而不是直接使用ContextWrapper?为什么在Android中使用ContextImpl实现Context而不是ContextWrapper?
2
A
回答
2
上下文是抽象类,它充当应用程序环境全局信息的接口。这是一个抽象类,其实现由Android系统提供。它允许访问特定应用的资源和类,以及向上调用应用程序级的操作,如发射活动,广播和接收意图等
见Context类代码here
ContextWrapper是Context的一个适配器或代理实现,它将其所有调用简单地委托给另一个Context。可以被分类为修改行为而不更改原始上下文。 [它使用adapter pattern]
见ContextWrapper类代码here
ContextImpl是上下文API,它提供了一种用于活性和其他应用程序组件的基本上下文对象的公共实现。
见ContextImpl类代码here
因此,如果您浏览的上述三个类的代码,你可以 容易理解的抽象类Context类声明的API 方法,ContextImpl实现这些API方法,而 ContextWrapper类只是任何Context类型的适配器,所以它可以在需要适配器模式的各个地方使用 而不是使用Context子类的 。
希望它减少混乱!
+0
非常感谢 –
相关问题
- 1. 为什么在“活动”中直接使用ContextWrapper而不是隐式上下文
- 2. 当我使用ContextWrapper和Context创建Android WebView对象时,有什么区别?
- 3. android中的'Context'是什么?
- 4. 为什么在实现Runnable时使用Thread.currentThread()。isInterrupted()而不是Thread.interrupted()?
- 5. 为什么java.util.Stack是使用Vector实现的而不是Arraylist
- 6. 为什么在mako中使用Context?
- 7. 为什么在c#中而不是C++中实现IDataReader类?
- 8. 为什么使用数组而不是BT实现分段树
- 9. 为什么SortedList实现使用ThrowHelper而不是直接抛出?
- 10. 为什么策略模式使用实现而不是扩展?
- 11. 为什么在Iterable中实现zipWithIndex而不是Traversable?
- 12. 在android,application context中实现构造函数的正确方法是什么?
- 13. 为什么在std :: max实现中使用if-else而不是三元操作
- 14. android httppost为什么在PHP/MySQL中使用$ _REQUEST而不是$ _POST?
- 15. 为什么这个类中的一些构造函数使用this(context)而不是super(context)?
- 16. 为什么说“协作”实现“用例”而不是反之呢?
- 17. 什么ECMAScript 6/7标准在Firefox中实现而不是在Chrome中实现?
- 18. 为什么在使用Long而不是Integer时会出现ClassCastException?
- 19. 为什么将xts实现为矩阵而不是数据框?
- 20. 为什么使用classmethod而不是staticmethod?
- 21. 为什么使用iconv_strpos而不是strpos?
- 22. 为什么使用registerDefaults:而不是setValue:forKey:?
- 23. 为什么使用TagBuilder而不是StringBuilder?
- 24. 为什么,而不是使用回调
- 25. 为什么使用结构,而不是
- 26. 为什么使用StringWriter而不是StringBuffer?
- 27. 为什么使用s:Line而不是mx:HRule?
- 28. 为什么使用ImageIcon而不是Image?
- 29. 为什么使用SQLiteOpenHelper而不是SQLiteDatabase?
- 30. 为什么使用MapFragment而不是SupportMapFragment?
这不是'ContextWrapper'的作用。 'ContextWrapper'实现[包装器(或适配器)模式](https://en.wikipedia.org/wiki/Adapter_pattern)。 – CommonsWare