2015-09-06 95 views
4

所以我正在开发一个android应用程序。我遇到了Color班。我看到它的一种方法是colorToHSV。就这个名字而言,我认为它会返回一个浮点数组(HSV)。但是,它返回无效!它接受一个数组作为参数!我认为它会修改传入的数组。但为什么它必须这样做?只需返回一个数组!我也在readBooleanArrayParcel中看到这种模式。为什么Android SDK中的某些方法接受数组作为参数而不是返回数组?

为什么它声明这样的方法?这是某种模式吗?

回答

6

但为什么要这样做呢?

通常,这种编码模式旨在鼓励回收对象,避免每次新分配。

这在Android中尤为重要,与之前的Android 5.0,the garbage collector was non-compacting一样(甚至ART的Android 5.0+垃圾收集器仅在应用程序处于后台时收集)。创建大量的小对象,即使它们被垃圾收集,也意味着你的堆变得分散,阻碍你在将来进行分配的能力。

+0

但是为什么特别要数组?为什么它不是这样做的一切? – Sweeper

+0

@Sweeper:尝试调整Android API以尽量减少分配不限于数组。在某些情况下,Android本身强制执行回收(例如'SensorEvent')。在某些情况下,Android明确鼓励回收(例如'Bitmap','AttributeSet')。请注意,虽然'Parcel'('readBooleanArray()')引用的一个方法需要一个数组,但'Parcel'上的其他方法需要其他集合(例如'readList()')。由于我没有写这些课,所以我不能给你比这更具体的动机。 – CommonsWare

+0

感谢您的回答! – Sweeper

相关问题