最近在上下文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