我正在为触摸设备开发自定义文本字段,此文本字段将用于游戏。这个自定义文本字段是一个类,并且有一个变量,其中存储了键盘图像,它是静态变量,如果我必须在一页(屏幕)中显示 2 个文本字段,我将不得不创建文本字段类的 2 个对象并且由于键盘图像存储在静态变量中,它将由两个对象共享,现在我想知道,如果自定义键盘类创建了任何对象,这些对象(内存)是否被任何变量引用,如果不是我想释放图像内存并在创建新对象时重新加载它。
问问题
147 次
2 回答
2
如果您有权访问WeakReference
,则可以在类中为图像保留静态WeakReference
,并在类的实例中具有非静态(强)引用:
public class CustomTextField {
// Only necessary if multiple threads can create UI elements
private static final Object lock = new Object();
private static WeakReference<Image> keypadRef;
private final Image keypad;
public CustomTextField() {
this.keypad = loadKeypad();
}
private static Image loadKeypad() {
Image keypad = null;
// Same comment as above: you don't need the lock if the UI elements are
// not created in multiple threads.
synchronized (lock) {
if (keypadRef != null) {
keypad = keypadRef.get();
}
// Either there was no existing reference, or it referenced a GCed
// object.
if (keypad == null) {
keypad = new Image();
keypadRef = new WeakReference(keypad);
}
}
return keypad;
}
}
这使得键盘图像只要没有引用它的实例就可以进行垃圾收集,否则它会被保留并在实例之间共享。
于 2012-10-15T08:50:51.107 回答
1
对于 Java ME 应用程序的 IMO,您应该对代码库有足够的了解,以便自己了解何时可以释放图像等需要大量内存的对象。
于 2012-10-15T11:16:11.627 回答