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