gpt4 book ai didi

android - 为什么直接在 Activity 中使用 ContextWrapper 而不是来自 "this"的隐式上下文

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:17 25 4
gpt4 key购买 nike

通过一些所谓的“好”来源来了解 Android 中上下文处理的细节和技巧,我多次遇到一种我无法理解的模式。

当您同样可以很好地使用隐式上下文时,使用 ContextWrapper 有什么好处?

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

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

不仅仅是

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

尽管 getFilesDir() 是在 ContextWrapper 类中定义的,但 Activity 无论如何都是 ContextWrapper 的子类,因此您无论如何都可以直接访问该方法。

那么这种增加的复杂性解决了什么潜在问题(我没有看到)?

最佳答案

我会说(我可能是错的)在您提出的场景(和上下文)中可能没有什么不同。 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();
}
};

关于android - 为什么直接在 Activity 中使用 ContextWrapper 而不是来自 "this"的隐式上下文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31382060/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com