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