gpt4 book ai didi

java-me - 我怎样才能知道j2me中是否有某个类(内存)的对象被引用?

转载 作者:行者123 更新时间:2023-12-02 14:53:47 27 4
gpt4 key购买 nike

我正在为触摸设备开发一个自定义文本字段,该文本字段将在游戏中使用。这个自定义文本字段是一个类,并且有一个存储键盘图像的变量,该变量是静态变量,如果我必须在一页(屏幕)中显示 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;
}
}

这使得键盘图像一旦没有实例引用它就可以进行垃圾回收,否则它将被保留并在实例之间共享。

关于java-me - 我怎样才能知道j2me中是否有某个类(内存)的对象被引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12890417/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com