1
我正在爲Symbian S60第五版一個Java ME應用程序,我有記憶問題。經過一段時間的運行應用程序,我收到內存不足的例外。 我從Google地圖(通過諾基亞5800中的集成GPS)獲取圖像並顯示它們。的Java ME的內存不足
我有這個實現是這樣的:
- 類
MIDlet
與方法setForm()
- 類
Data
具有收集有關的座標信息的線,從谷歌地圖獲取圖像,創造了新的形式,追加圖像,並從Midlet
調用方法setForm(f)
。
可能的Display.setCurrent(Form f)
保留表單上的引用,並且像這樣內存變得快滿了。 我試着用Canvas
但它有一些愚蠢的UI(有的圓,有的4個按鈕),我不喜歡。
我怎樣才能解決這個問題?
PS:代碼...
在類
MIDlet
public void setInfo(Form f) { getDisplay().setCurrent(f); }
在
TouristData
類收集關於位置信息和獲取的地圖圖像private attributes: private Form f=null; private ImageItem imageItem=null; private Image img = null;
方法
locationUpdated
其中我這叫當收到新的位置:public void locationUpdated(LocationProvider provider,final Location location) { if (!firstLocationUpdate) { firstLocationUpdate = true; statusListener.firstLocationUpdateEvent(); } if(touristUI != null) { new Thread() { public void run() { if(location != null && location.isValid()) { //lokacija je, prikaži! try { QualifiedCoordinates coord =location.getQualifiedCoordinates(); if(imageItem == null) { imageItem = new ImageItem(null,null,0,null); imageItem.setAltText("ni povezave"); f.append(imageItem); } else { img = googleConnector.retrieveStaticImage2(360,470, coord.getLatitude(), coord.getLongitude(), 16, "png32"); //z markerje imageItem.setImage(img); } }catch(Exception e) {} } else { } } }.start(); } }
我有類似的問題,我是SW在Palm T3運行,所以我的結論,我可以通過被aggresive與讓資源prolonge應用程序的生命,所有不需要的變量= NULL的所有vector.clear()時,沒有必要的。虛擬機是IBM J9,它根本不是什麼嚴肅的東西,但它以某種方式運作。 – 2009-12-10 14:51:32
問題解決了。我發現它可能是Canvas上的虛擬鍵盤,因此我使用了畫布,並且還將所有參考放在了mapImage = null上。所以現在它的一切都與內存相符。 感謝大家的幫助, 米蘭Dojčinovski – Milan 2009-12-11 19:09:35