0

有这样的类字段可以吗:

private Resources resources;

并像这样在构造函数中设置它:

resources = myViewGroup.getContext().getResources();

我从来没有见过这样的参考,所以我担心这里有危险。

4

2 回答 2

1

这并不危险,但似乎不是很优雅;

来自文档:

 The Android SDK tools compile your application's resources into the application binary at build time. 

这意味着它们在运行时不会更改,因此您保留的对它们的任何引用将始终是最新的。由于同样的原因, 我不建议将参考传递给德墨忒耳定律,Resources而是在某个较高级别(例如,您可以访问的地方Context)获取它们Activity并将值传递给函数,如String, Drawable,float等等

于 2013-11-13T14:46:35.267 回答
1

代码没有任何问题。

潜在的危险是它会指向错误的资源或导致内存泄漏。

当配置更改时,例如由于屏幕旋转,默认情况下,Android 会销毁您的活动并使用更新的配置特定资源重新创建它。

由于您将其作为常规成员变量而不是静态类变量,因此只要对象本身还活着,引用就会被保存。没有泄漏,并且由于您在构造函数中更新了引用,它也将指向正确的资源变体。

如果您在清单中实现了自定义配置更改处理configChanges,则默认的销毁并重新创建配置更改处理不适用。在这些情况下,您可能会不小心保留对旧Resources对象的引用。

于 2013-11-13T14:43:41.197 回答