【问题标题】:What is the purpose of ContextWrapper (having a proxy for Context)?ContextWrapper 的目的是什么(拥有 Context 的代理)?
【发布时间】:2019-08-14 12:49:33
【问题描述】:
根据 Android 文档,ContextWrapper 是 Context 的“[p]roxying 实现,它只是将其所有调用委托给另一个 Context。可以子类化以修改行为而不更改原始 Context 。”
我对代理模式没有太多经验。它在这里如何使用以及用于什么目的?换句话说,为什么它的间接子类,比如Activity和Service,不直接子类呢?
【问题讨论】:
标签:
android
android-context
proxy-pattern
【解决方案1】:
能够覆盖它的一些行为。例如,您将拥有应用程序的基本 Context,然后将其放入 ContextWrapper 并覆盖 Resource 对象以对其进行主题化(这是 Android 实际所做的)。
至于你为什么要这样做而不只是子类 - 以便不必制作两个可能非常重量级的对象。您也可以在两者之间共享变量,但这会增加内存泄漏的可能性。对象的创建也可能很昂贵,但如果已经完成,您可以通过代理来避免这种情况。