为什么直接在Activity中使用ContextWrapper而不是从“this”中隐式的上下文

通过一些所谓的“好”来源来了解Android的上下文处理的细节和技巧我已经遇到了一个多次我不明白的模式。

使用ContextWrapper的优点是什么时候可以同时使用隐式上下文?

例如,为什么要在活动方法中使用以下内容(直接在Activity类中定义)

... ContextWrapper cw = new ContextWrapper(getApplicationContext()) File filesDir = cw.getFilesDir(); ... 

而不是仅仅

 ... File filesDir = getFilesDir(); ... 

即使在ContextWrapper类中定义了getFilesDir(),Activity仍然是ContextWrapper的一个子类,所以您可以直接访问该方法。

那么,这个增加的复杂性地址是什么潜在的问题(我没有看到)呢?

Solutions Collecting From Web of "为什么直接在Activity中使用ContextWrapper而不是从“this”中隐式的上下文"

我会说(我可能是错的),在你提出的情景(和上下文)可能没有什么区别。 getApplicationContext().getFilesDir()可以像使用一样简单。

不过,我相信ContextWrapper可能会在其他情况下有用。 据我所知,这是适配器模式。 您可能只想为某些方法提供不同的行为,而将所有其他方法代理到您传入的原始上下文引用。

RemoteViews查看这段代码:

 // RemoteViews may be built by an application installed in another // user. So build a context that loads resources from that user but // still returns the current users userId so settings like data / time formats // are loaded without requiring cross user persmissions. final Context contextForResources = getContextForResources(context); Context inflationContext = new ContextWrapper(context) { @Override public Resources getResources() { return contextForResources.getResources(); } @Override public Resources.Theme getTheme() { return contextForResources.getTheme(); } };