最近在上下文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. 为什么java.util.Stack是使用Vector实现的而不是Arraylist
- 5. 为什么使用数组而不是BT实现分段树
- 6. 为什么SortedList实现使用ThrowHelper而不是直接抛出?
- 7. 为什么在Iterable中实现zipWithIndex而不是Traversable?
- 8. 在android,application context中实现构造函数的正确方法是什么?
- 9. 为什么说“协作”实现“用例”而不是反之呢?
- 10. 为什么在使用Long而不是Integer时会出现ClassCastException?
- 11. 为什么将xts实现为矩阵而不是数据框?
- 12. 为什么使用HTML而不是HAML?
- 13. 为什么,而不是使用回调
- 14. 为什么使用classmethod而不是staticmethod?
- 15. 为什么使用TCPDF而不是mpdf
- 16. 为什么使用leal而不是incq?
- 17. 为什么使用iconv_strpos而不是strpos?
- 18. 为什么使用s:Line而不是mx:HRule?
- 19. 为什么使用uImage而不是zImage
- 20. 为什么使用DataSource而不是XADataSource?
- 21. 为什么使用char []而不是String?
- 22. 为什么使用结构,而不是
- 23. 为什么使用registerDefaults:而不是setValue:forKey:?
- 24. 为什么使用追加()而不是+
- 25. 为什么使用Number.parseInt而不是parseInt()?
- 26. 为什么使用TagBuilder而不是StringBuilder?
- 27. JMS中Context的用途是什么?
- 28. 为什么Java提供规范而不是实现
- 29. C++ - 为什么要op + =而不是其他方式实现op +?
- 30. 为什么包含头文件而不是实现?
这不是'ContextWrapper'的作用。 'ContextWrapper'实现[包装器(或适配器)模式](https://en.wikipedia.org/wiki/Adapter_pattern)。 – CommonsWare