4

我正在为触摸设备开发自定义文本字段,此文本字段将用于游戏。这个自定义文本字段是一个类,并且有一个变量,其中存储了键盘图像,它是静态变量,如果我必须在一页(屏幕)中显示 2 个文本字段,我将不得不创建文本字段类的 2 个对象并且由于键盘图像存储在静态变量中,它将由两个对象共享,现在我想知道,如果自定义键盘类创建了任何对象,这些对象(内存)是否被任何变量引用,如果不是我想释放图像内存并在创建新对象时重新加载它。

4

2 回答 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 回答