是否可以拥有这样的类字段:
private Resources resources;
并在构造函数中设置它:
resources = myViewGroup.getContext().getResources();
我从未见过这样的参考,所以我担心这里有危险。
答案 0 :(得分:1)
代码没有任何问题。
潜在的危险是它会指向错误的资源或导致内存泄漏。
配置更改时,例如由于屏幕旋转,默认情况下Android会破坏您的活动并使用更新的配置特定资源重新创建它。
由于您将它作为常规成员变量而不是静态类变量,因此只有在对象本身处于活动状态时才会保留引用。没有泄漏,因为您在构造函数中更新引用,它也将指向正确的资源变体。
如果您在清单中使用configChanges
实现了自定义配置更改处理,则默认的销毁和重新创建配置更改处理不适用。在这些情况下,您可能会意外地保留对旧Resources
对象的引用。
答案 1 :(得分:1)
这并不危险,但似乎不是很优雅;
来自docs:
The Android SDK tools compile your application's resources into the application binary at build time.
这意味着它们不会在运行时更改,因此您保留的对它们的任何引用都将始终是最新的。由于同样的原因,Law of Demeter我不建议将引用传递给Resources
,而是将其提升到某个高级别(您可以访问Context
,例如。Activity
)并将值传递给String
,Drawable
,float
等函数。