我正在爲觸摸設備使用自定義文本字段,並且此文本字段將用於遊戲。這個自定義文本字段是一個類,並有一個變量,其中存儲的鍵盤圖像是靜態變量,如果我必須在一個頁面(屏幕)中顯示2個文本字段,我將不得不創建2個文本字段類的對象並且由於鍵盤圖像存儲在一個靜態變量中,它將被兩個對象共享,現在我想知道,如果有任何對象是由自定義鍵盤類創建的,這些對象(內存)是否被任何變量引用,if不是我想要釋放圖像內存並在創建新對象時重新加載它。如何查找j2me中是否有任何類(內存)的對象被引用或不在?
4
A
回答
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;
}
}
這使得只要沒有引用它的實例,鍵盤圖像就有資格進行垃圾回收,否則它會一直存在並在實例之間共享。
1
IMO爲Java ME應用程式,你應該有代碼庫的足夠了解才知道自己當圖像等消耗內存對象可以被釋放。
+0
感謝回答,你看到這個類會被其他程序使用,我可以提供當程序員也需要一個釋放資源的函數時,我會依賴程序員來釋放資源。 –
相關問題
- 1. 如何在內存中查找對象
- 2. 如何查找任何對象使用的內存
- 3. 如何查找某個類是否存在對象
- 4. 如何查找對象是否來自類但不是超類?
- 5. 找到引用數爲Java對象或檢查它是否被引用別處
- 6. 如何識別對象是否只是被引用或只是被複制? .net內存管理
- 7. 檢查linq對象是否被引用
- 8. 如何找出對象是否爲任何類型的列表?
- 9. 如何查找兩個片是否引用相同的內存?
- 10. 使用.gitignore來查找是否有任何文件被緩存在git中
- 11. 如何查找是否可以刪除引用的對象?
- 12. 如何查找對象是否存在於數組中javascript
- 13. 如何檢查對象是否存在?
- 14. 在Swift中,如何檢查對象是否是任何類型的集合?
- 15. 如果對象被引用,那麼它會自動釋放j2me中的內存或不釋放j2me中的內存?
- 16. 如何找到類屬性是否存在或不使用jQuery
- 17. MongoDB在被引用對象中的字段查找/查找
- 18. 找出plist內是否存在對象?
- 19. Java是否將內存中的類保留或只是對象?
- 20. 查找對象中是否存在下一個值或不存在javascript
- 21. 如何檢查對象列表中是否存在對象?
- 22. 在VirtualStringTree中使用類對象而不是記錄是否有任何折衷?
- 23. 如何查找是否有任何罐子正在使用已棄用的類
- 24. 查找對象是否存在Dbset
- 25. 在J2ME中查找對象M3G
- 26. 是否可以在對象列表中查找對象的類?
- 27. 如何在刪除前檢查對象是否被引用? (多對多關係)
- 28. 是否有任何發現json對象的不同內容?
- 29. 內存中的對象在使用後是否被刪除?
- 30. J2ME是否有任何PDF庫?
謝謝弗蘭克,但只有一個問題,在J2ME沒有訪問WeakRefrence,但我可以使用上述代碼在我的其他Java項目,所以再次感謝 –
它取決於J2ME配置文件,cf 。我的WeakReference鏈接位於J2ME javadoc中,而不是J2SE。你可能沒有在你正在使用的配置文件(因此我的「如果」),但也有一些。 –
嗨弗蘭克,以及我發現了WeakReference是在我使用的配置文件,我有一個疑問,如果我保持(鍵盤)變量作爲非決賽,將結果是相同的。因爲我在編譯時在這一行發現錯誤(this.keypad = keypad;)說「最終的現場鍵盤不能被分配」。 –