我已经接管了一个应用程序的源代码继续开发。在很多情况下,字符串资源被用作包中的键:bundle.putboolean(getString(r.string.bundle_extra_name_from_user),true);
在代码的其他部分,硬编码字符串被用作键(在包的putValue和getValue方法中都是如此)。所以我决定去掉硬编码的东西。此外,我认为,每次要向包添加信息/从包接收信息时,从r.string...
中挖掘字符串资源是一个过于耗费资源的操作。而不仅仅是在一个专用类中拥有一堆string
常量。访问这些应该快得多,因为它们在内存中(至少我是这么认为的)。
我重构了整个程序以使用string
常量:
public class BundleConstants {
public static final String VEHICLE_ID = "vehicleId";
public static final String TRANSACTION_ID = "transactionId";
public static final String PIN_CODE = "pinCode";
public static final String DEVICE_ID = "deviceId";
.
.
.
etc
private BundleConstants() {}
}
完成后,我注意到在应用程序的某些地方,值没有到达包中。bundle.getBoolean(bundleConstants.boolean_key);
每次都给我false
,甚至当它被设置为true
时(我对它进行了调试,true
肯定已经放入了bundle中)。
从那时起,我重构了它,将字符串资源用作捆绑键。现在一切都很顺利。
有没有一种特殊的方法来使用字符串常量作为捆绑键?还是我忽略了什么?
在Java中使用static final
常量有点棘手。直到您第一次创建包含类的实例或调用类本身内部的静态方法时,才会分配常量值(当然这是一个弱点!)
因此,要使常量正常工作,您可以在restore state方法调用之前加载的类中声明它们(如activity或片段),或者在访问键之前直接调用BundleConstants
类中的方法来初始化它们。