我有一个需要从扩展Context
的多个类中的列表中获取数据的应用程序。有时我可以将列表的引用传递给这些类,有时我不能。因此,我想知道是否将列表放在R.array.mylist
上,然后在不同的类中不断地从它们中调用可能是一个更好的主意?我特别想知道连续调用资源是否存在“高/低/可接受”(就内存和CPU而言)开销。
任何建议/答案表示赞赏。谢谢。
最佳答案
“ R”(资源)文件是对XML定义对象的静态引用。以XML创建引用可以使您使用扩展Context
的对象来引用那些对象。它使用Resources
类来引用这些对象。
如果检查源代码(http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/5.1.1_r1/android/content/res/Resources.java#Resources),您将发现它实质上是这些XML定义类的处理程序。如果可以访问Context
,则可以采取一些步骤来改进Context
和Resources
提供的短引用路径。
您可以构建自己的机制来存储和/或引用此数组,也可以使用框架为您提供的机制。您很有可能会发现该框架在速度,内存分配等方面提供了可接受的性能。由于Context
和Resources
随Application
对象一起加载,因此使用这些工具的开销很少。您会注意到源代码尝试优化XML对象等的缓存。这意味着访问和缓存机制可能未针对某些用例进行优化。
在某些情况下,您可以击败框架的有效性,但是在大多数情况下,它都很好。如果您有一个特殊的用例(例如100,000个元素的数组),那么您可能会比框架更好地进行优化。您很可能会发现将array
存储为XML定义的对象既方便又有效。