Memory management Java使我内存不足
我正在为Symbian S60第5版制作一个Java ME应用程序,内存有问题。运行应用程序一段时间后,我收到内存不足异常。 我正在从谷歌地图(通过诺基亚5800中的内置GPS)获取图像并显示它们 我已经这样实现了:Memory management Java使我内存不足,memory-management,java-me,Memory Management,Java Me,我正在为Symbian S60第5版制作一个Java ME应用程序,内存有问题。运行应用程序一段时间后,我收到内存不足异常。 我正在从谷歌地图(通过诺基亚5800中的内置GPS)获取图像并显示它们 我已经这样实现了: 使用方法setForm() 类Data具有一个线程,该线程收集有关坐标的信息,从Google maps获取图像,创建新表单,附加图像,并从Midlet调用方法setForm(f) 很可能,Display.setCurrent(Form f)会在表单上保留引用,这样内存就会很快被
- 使用方法
setForm()
- 类
具有一个线程,该线程收集有关坐标的信息,从Google maps获取图像,创建新表单,附加图像,并从Data
调用方法Midlet
setForm(f)
Display.setCurrent(Form f)
会在表单上保留引用,这样内存就会很快被填满。
我尝试了Canvas
,但它有一些愚蠢的UI(一些圆圈和一些4个按钮),我不喜欢
我怎样才能解决这个问题
附:代码
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();
}
}
您是否保留对表单或图像的引用?这将防止它们被垃圾收集,并会导致内存不足错误
没有一些源代码很难说。无论如何,最好重新设计Midlet,不要创建新表单,而是重复使用相同的表单。是否保留对表单或图像的引用?这将防止它们被垃圾收集,并会导致内存不足错误
没有一些源代码很难说。无论如何,最好重新设计你的Midlet,不要创建新的表单,而是重复使用相同的表单。我也有类似的问题,我的软件在Palm T3上运行,所以我的结论是,我可以通过积极地使用资源来延长应用程序的生命,所有不需要的变量=null all vector.clear(),当不需要时。。。虚拟机是IBMJ9,这一点都不严重,但它以某种方式发挥了作用。问题解决了。我发现它可能是画布上的虚拟键盘,所以我使用了画布,并且我还将所有引用放在mapImage=null上。所以现在一切都好了。感谢大家的帮助,Milan DojčinovskiI也遇到了类似的问题,我的软件在Palm T3上运行,所以我的结论是,我可以通过积极使用资源来延长应用程序的使用寿命,所有不需要的变量=null all vector.clear()当不需要时。。。虚拟机是IBMJ9,这一点都不严重,但它以某种方式发挥了作用。问题解决了。我发现它可能是画布上的虚拟键盘,所以我使用了画布,并且我还将所有引用放在mapImage=null上。所以现在一切都好了。感谢大家的帮助,米兰·多吉诺夫斯基